您的位置:首页 > 编程语言 > C语言/C++

Binary Tree Level Order Traversal II

2016-05-05 10:29 489 查看
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]
]


1.我的解答(真是烂)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>>res,result;
if(root == NULL)
return result;
queue<TreeNode*> q1, q2;
q1.push(root);
vector<int>v;
while(!q1.empty()){
TreeNode* t = q1.front();
q1.pop();
v.push_back(t->val);
if(t->left)
q2.push(t->left);
if(t->right)
q2.push(t->right);
if(q1.empty()){
res.push_back(v);
v.clear();
while(!q2.empty()){
q1.push(q2.front());
q2.pop();
}
}
}
while(!res.empty()){
result.push_back(res.back());
res.pop_back();
}
return result;
}
};

2.别人的代码 (用递归)

First version costs 8ms:

void levelOrder(vector<vector<int>> &ans, TreeNode *node, int level) {
if (!node) return;
if (level >= ans.size())
ans.push_back({});
ans[level].push_back(node->val);
levelOrder(ans,node->left,level+1);
levelOrder(ans,node->right,level+1);
}

vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> ans;
levelOrder(ans,root,0);
reverse(ans.begin(),ans.end());
return ans;
}
Second version costs 4ms:
int depth(TreeNode *root) {
if (!root) return 0;
return max(depth(root->left),depth(root->right))+1;
}

void levelOrder(vector<vector<int>> &ans, TreeNode *node, int level) {
if (!node) return;
ans[level].push_back(node->val);
levelOrder(ans,node->left,level-1);
levelOrder(ans,node->right,level-1);
}

vector<vector<int>> levelOrderBottom(TreeNode* root) {
int d = depth(root);
vector<vector<int>> ans(d,vector<int> {});
levelOrder(ans,root,d-1);
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ leetcode tree recursion