题目
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
思路
1.分层遍历,控制两个计数器
2.从底层向上层输出 vec.insert(vec.begin(), temp)
实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> res;
if (root == NULL) {
return res;
}
func(res, root);
return res;
}
void func(vector<vector<int>>& res, TreeNode* root) {
queue<TreeNode*> que;
que.push(root);
vector<int> temp;
int cur = 1;
int next = 0;
while (!que.empty()) {
if (que.front()->left != NULL) {
que.push(que.front()->left);
++next;
}
if (que.front()->right != NULL) {
que.push(que.front()->right);
++next;
}
temp.push_back(que.front()->val);
que.pop();
--cur;
if (cur == 0) {
cur = next;
next = 0;
res.insert(res.begin(), temp);
temp.clear();
}
}
}
};
本文介绍了一种二叉树的遍历方法——自底向上的层次遍历,通过分层遍历和使用队列实现,最终将结果以逆序方式输出。文章详细解释了算法的实现思路,并提供了C++代码示例。
577

被折叠的 条评论
为什么被折叠?



