您的位置:首页 > 其它

【LeetCode】Binary Tree Level Order Traversal II

2014-04-24 16:18 453 查看
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],
]


confused what
"{1,#,2,3}"
means? >
read more on how binary tree is serialized on OJ.

OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:

1
/ \
2   3
/
4
\
5

The above binary tree is serialized as
"{1,2,3,#,#,4,#,#,5}"
.
思路:参考Binary Tree Level Order Traversal。但是要注意最后要翻转。
reverse(res.begin(),res.end());

代码参考下面。当然还可以使用栈来实现。这样顺序就要换一下。

class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > res;
vector<int> onelev;
if(root==NULL)return res;
queue<TreeNode *> que;
que.push(root);
que.push(NULL);//第一层
TreeNode *tr;
while(1){
tr=que.front();
que.pop();

if(tr!=NULL){
onelev.push_back(tr->val);
if(tr->left!=NULL)que.push(tr->left);
if(tr->right!=NULL)que.push(tr->right);

}else{
res.push_back(onelev);
onelev.clear();

if(que.empty())break;
que.push(NULL);
}
}
reverse(res.begin(),res.end());
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: