题目:给定一颗二叉树,返回自底向上的层次遍历
例如:给定二叉树[3,9,20,null,null,15,7]
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
思路:树的层次遍历
由于输出要自底向上输出,所以可以使用一个栈作为中间的结果缓冲,再依次弹出即可自底向上输出结果。
class Solution{
vector<vector<int>> levelOrderBottom(TreeNode* root)
{
vector<vector<int>>res;
stack<vector<int>>s;
queue<TreeNode* >q;
q.push(root);//根节点入队
if(root==NULL)return res;
while(!q.empty())
{
queue<TreeNode*>next;//建立第二个队列,存放下一层节点据
vector<int>v;
while(!q.empty())
{
TreeNode* tre=q.front();
v.push_back(tre->val);
q.pop();//根节点出队
if(tre->left!=NULL)
next.push(tre->left);
if(tre->left!=NULL)
next.push(tre->left);
}
s.push(v);//用一个向量来保存这一层的节点
q=next;//进入下一层
}
while(!s.empty())
{
res.push_back(s.top());
s.pop();
}
return res;
}
};