您的位置:首页 > 其它

Binary Tree Level Order Traversal II

2013-07-01 23:55 295 查看
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],

]

class Solution {
public:
int getHeight(TreeNode *root){
if (!root){
return 0;
}
return max(getHeight(root->left),getHeight(root->right)) + 1;
}
vector<vector<int> > levelOrderBottom(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > ans;
vector<int> layer_v;
if (!root){
return ans;
}
int height = getHeight(root);
ans.resize(height);

int layer = 0;
queue<pair<TreeNode*, int> > qu;

qu.push(make_pair(root,0));
pair<TreeNode*, int> node;

while(!qu.empty()){
node = qu.front();
qu.pop();
if (node.second == layer){
layer_v.push_back(node.first->val);
}else{
ans[height - layer -1] = layer_v;
layer++;
layer_v.clear();
layer_v.push_back(node.first->val);
}

if (node.first->left){
qu.push(make_pair(node.first->left,node.second+1));
}
if (node.first->right){
qu.push(make_pair(node.first->right,node.second+1));
}
}
ans[height - layer -1] = layer_v;

return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: