Q: 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], ]
按层(从上往下)输出二叉树的结点值。
A:vector insert方法的使用。每次访问到新的一层节点时,在result前部插入新的vector<int>.
struct QueueNode{
TreeNode *tree;
int level;
QueueNode(TreeNode *t,int l):tree(t),level(l){}
};
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>> result;
if(!root)
return result;
queue<QueueNode> q;
int levelcount = -1;
q.push(QueueNode(root,0));
while(!q.empty())
{
QueueNode qNode = q.front();
q.pop();
if(qNode.level!=levelcount)
{
vector<int> set;
result.insert(result.begin(),set);
levelcount++;
}
result[0].push_back(qNode.tree->val);
if(qNode.tree->left)
q.push(QueueNode(qNode.tree->left,qNode.level+1));
if(qNode.tree->right)
q.push(QueueNode(qNode.tree->right,qNode.level+1));
}
return result;
}
};