Binary Tree Level Order Traversal II
问题描述:给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
3
/ \
9 20
/ \
15 7
返回:
[
[15,7],
[9,20],
[3]
]
问题解决:层次遍历问题一般都可以借用队列来解决。将同一层的节点放进队列中,然后从头开始遍历节点的子节点并放入队列中,一旦一个节点的全部子节点放进队列则将该节点删除,并把该节点的值存进数组中,直到删除掉该层的最后一个节点,此时数组中包含了该层所有节点的值,并且队列中只包括下一层的所有节点,然后按照相同的步骤接着往下做。
vector< vector<int> > levelOrderBottom(TreeNode *root)
{
vector< vector<int> > res;
if(!root) return res;
queue<TreeNode*> q;
q.push(root);
while(!q.empty())
{
vector<int> cur;
int size=q.size();
for(int i=0;i<size;i++)
{
TreeNode *node=q.front;
q.pop();
cur.push_back(node->val);
if(node->left) q.push(node->left);
if(node->right) q.push(node->right);
}
res.push_back(cur);
}
reverse(res.begin(),res.end());
return res;
}