Description
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
Sample
例如:
给定二叉树 [3,9,20,null,null,15,7],
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
Solution
我们要逐层逐层的遍历,也就是说符合先进先出。那么我们就可以考虑用队列来求解。将头指针放入队列,判断它的左右孩子是否为空,不为空则放入队列,如此执行下去,直到队空!
AC Code
class Solution {
public:
vector<vector<int> > vv;
vector<int> v;
queue<TreeNode*> q;
int now=0,next=0;//当前层队内元素个数 下一层队内元素个数
vector<vector<int>> levelOrderBottom(TreeNode* root) {
if(root==NULL) return vv;
else q.push(root);
now++;
while(!q.empty()){
TreeNode * temp = q.front();
v.push_back(temp->val);
q.pop();
now--;
if(temp->left){
q.push(temp->left);
next++;
}
if(temp->right){
q.push(temp->right);
next++;
}
if(now==0){//一层遍历结束
vv.push_back(v);
v.clear();//要记得清空
now=next;//更新
next=0;
}
}
reverse(vv.begin(),vv.end());//因为是自顶向下遍历的,需要翻转一下
return vv;
}
};
PS:希望对你有帮助!