给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7
返回其自底向上的层次遍历为:
[ [15,7], [9,20], [3] ]
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == NULL)
return 0;
else
return 1 + max(maxDepth(root ->left), maxDepth(root ->right));
}
vector<vector<int> > levelOrderBottom(TreeNode* root)
{
int depth = maxDepth(root);
vector<vector<int> > res(depth);
if(root == NULL)
return res;
queue<TreeNode*> q;
q.push(root);
int cnt = 0;
while(!q.empty())
{
int len = q.size();
vector<int> temp;
for(int i = 0; i < len; i++)
{
TreeNode* node = q.front();
q.pop();
temp.push_back(node ->val);
if(node ->left != NULL)
q.push(node ->left);
if(node ->right != NULL)
q.push(node ->right);
}
res[depth - 1 - cnt++] = temp;
}
return res;
}
};
本文介绍了一种算法,用于实现二叉树的自底向上层次遍历,即从叶子节点所在层到根节点所在的层,逐层从左向右遍历。通过深度优先搜索确定树的深度,并使用队列实现层次遍历,最终返回一个包含各层节点值的二维数组。

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



