您的位置:首页 > 其它

LeetCode 之 Binary Tree Level Order Traversal II

2013-11-16 20:16 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}


这个题和1是一样的,看看这个


Binary Tree Level Order Traversal



只是输出的结果顺序相反,由于结果是一个vector,那么只要在上次的代码中改动一行就可以,

把result.push_back(temp)改成result.insert(result.begin(),temp);
即把压入vector的最后改成插在

vector
的最开始。

代码(132ms):

class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<vector<int>>result;
if(!root) return result;

queue <TreeNode*>q;
q.push(root);
q.push(NULL);

vector<int>current;
vector<int>&temp = current;
while(!q.empty()){
TreeNode * front = q.front();
q.pop();
if(front){
//头部不为空,把头部的值压入vector
//若该头部左右不为空,则入队列
temp.push_back(front->val);
if(front->left) q.push(front->left);
if(front->right) q.push(front->right);
}
else{
//头部为空,把上一次的vector整体压入result的开始
result.insert(result.begin(),temp);
//若为空,说明在处理最后一个NULL,不用push等操作
if(!q.empty()){
q.push(NULL);
vector<int>current;
//新建的vector,用以保存下一层的数据
temp = current;
}
}
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: