Binary Tree Level Order Traversal II
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
思路:层次队列遍历,每一层结束插入标志位tag,最后将vector逆序反转。
逆序的方式有很多,可以采用stl 的reverse() 直接逆转,也可以用list前插的方式,也可用栈。
class Solution{
public:
vector<vector<int> > levelOrderBottom(TreeNode *root){
vector<vector<int> > ret;
vector<int> level;
TreeNode *tag;
queue<TreeNode *> Q;
if(root==NULL)return ret;
Q.push(root);
Q.push(tag);
while(!Q.empty())
{
TreeNode *cur=Q.front();
Q.pop();
if(cur!=tag)
{
level.push_back(cur->val);
if(cur->left!=NULL)Q.push(cur->left);
if(cur->right!=NULL)Q.push(cur->right);
}
else{ //cur==tag,一层结束
ret.push_back(level);
level.erase(level.begin(),level.end());
if(Q.size()!=0) //队列中没有其他TreeNode节点
{
Q.push(tag); //打入标签
}else{ //已经是最后一个tag
break;
}
}
}
//逆序
reverse(ret.begin(),ret.end());
return ret;
}
};