Leetcode-107.二叉树的层次遍历II

题目描述

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:
给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其自底向上的层次遍历为:

[
[15,7],
[9,20],
[3]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法1:队列

与二叉树层次遍历一样,最后reverse一下,或者直接在头insert插入(但这样速度明显要慢下来)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
queue<TreeNode *> que;
vector<vector<int>> res;
if(root==NULL)
return res;
que.push(root);

TreeNode *p=new TreeNode(0);
while(!que.empty())
{
int n=que.size();
vector<int> temp;
for(int i=0;i<n;i++)
{
p=que.front();
que.pop();
temp.push_back(p->val);
if(p->left!=NULL) que.push(p->left);
if(p->right!=NULL) que.push(p->right);
}
res.push_back(temp);
}
reverse(res.begin(),res.end());
return res;
}
};