leetcode-102 二叉树的层次遍历
生活随笔
收集整理的這篇文章主要介紹了
leetcode-102 二叉树的层次遍历
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
給定一個二叉樹,返回其按層次遍歷的節(jié)點值。 (即逐層地,從左到右訪問所有節(jié)點)。
例如:
給定二叉樹: [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回其層次遍歷結(jié)果:
[
[3],
[9,20],
[15,7]
]
方法一(非遞歸)
二叉樹的層次遍歷即二叉樹的廣度遍歷,可以使用臨時數(shù)據(jù)結(jié)構(gòu)隊列進(jìn)行保存每一層的節(jié)點,同時輸出的時候?qū)⑵浞强盏淖笥易庸?jié)點假如的到隊列中。當(dāng)然,這里需要控制輸出的次數(shù)。
實現(xiàn)如下:
vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res;if (root == NULL) {return res;}queue<TreeNode*> Q;Q.push(root);while(!Q.empty()) {int size = Q.size();vector<int> tmp;for (int i = 0;i < size; ++i) {TreeNode *node = Q.front();Q.pop();if (node) {tmp.push_back(node->val);if (node->left) {Q.push(node->left);}if (node->right) {Q.push(node->right);} }}res.push_back(tmp);tmp.erase(tmp.begin(), tmp.end());}return res;
}
方法二:(遞歸)
vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> ans;pre(root, 0, ans);return ans;
}void pre(TreeNode *root, int depth, vector<vector<int>> &ans) {if (!root) return ;if (depth >= ans.size())ans.push_back(vector<int> {});ans[depth].push_back(root->val);pre(root->left, depth + 1, ans);pre(root->right, depth + 1, ans);
}
總結(jié)
以上是生活随笔為你收集整理的leetcode-102 二叉树的层次遍历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode-440 字典序的第K小
- 下一篇: C++ 互斥锁和条件变量实现读写锁