您好,登錄后才能下訂單哦!
這篇文章主要講解了“用C++實現(xiàn)二叉樹層序遍歷”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“用C++實現(xiàn)二叉樹層序遍歷”吧!
從底部層序遍歷其實還是從頂部開始遍歷,只不過最后存儲的方式有所改變,可以參見博主之前的博文 Binary Tree Level Order Traversal, 參見代碼如下:
解法一:
class Solution { public: vector<vector<int> > levelOrderBottom(TreeNode* root) { if (!root) return {}; vector<vector<int>> res; queue<TreeNode*> q{{root}}; while (!q.empty()) { vector<int> oneLevel; for (int i = q.size(); i > 0; --i) { TreeNode *t = q.front(); q.pop(); oneLevel.push_back(t->val); if (t->left) q.push(t->left); if (t->right) q.push(t->right); } res.insert(res.begin(), oneLevel); } return res; } };
下面來看遞歸的解法,由于遞歸的特性,我們會一直深度優(yōu)先去處理左子結(jié)點,那么勢必會穿越不同的層,所以當要加入某個結(jié)點的時候,必須要知道當前的深度,所以使用一個變量 level 來標記當前的深度,初始化帶入0,表示根結(jié)點所在的深度。由于需要返回的是一個二維數(shù)組 res,開始時由于不知道二叉樹的深度,不知道有多少層,所以無法實現(xiàn)申請好二維數(shù)組的大小,只有在遍歷的過程中不斷的增加。那么什么時候該申請新的一層了呢,當 level 等于二維數(shù)組的大小的時候,為啥是等于呢,不是說要超過當前的深度么,這是因為 level 是從0開始的,就好比一個長度為n的數(shù)組A,你訪問 A[n] 是會出錯的,當 level 等于數(shù)組的長度時,就已經(jīng)需要新申請一層了,新建一個空層,繼續(xù)往里面加數(shù)字,參見代碼如下:
解法二:
class Solution { public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> res; levelorder(root, 0, res); return vector<vector<int>> (res.rbegin(), res.rend()); } void levelorder(TreeNode* node, int level, vector<vector<int>>& res) { if (!node) return; if (res.size() == level) res.push_back({}); res[level].push_back(node->val); if (node->left) levelorder(node->left, level + 1, res); if (node->right) levelorder(node->right, level + 1, res); } };
Github 同步地址:
https://github.com/grandyang/leetcode/issues/107
類似題目:
Average of Levels in Binary Tree
Binary Tree Zigzag Level Order Traversal
Binary Tree Level Order Traversal
類似題目:
https://leetcode.com/problems/binary-tree-level-order-traversal-ii/
https://leetcode.com/problems/binary-tree-level-order-traversal-ii/discuss/35089/Java-Solution.-Using-Queue
https://leetcode.com/problems/binary-tree-level-order-traversal-ii/discuss/34981/My-DFS-and-BFS-java-solution
感謝各位的閱讀,以上就是“用C++實現(xiàn)二叉樹層序遍歷”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對用C++實現(xiàn)二叉樹層序遍歷這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。