二叉树的层次遍历 ii

107. 二叉树的层次遍历 II


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

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

1
2
3
4
5
  3
/
9 20
/
15 7

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

1
2
3
4
5
[
[15,7],
[9,20],
[3]
]

解法:

使用队列来实现二叉树的层遍历。

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
30
31
32
33
34
35

* 自下而上的层遍历
* 从叶子节点所在层到根节点所在的层,逐层从左向右遍历
* @param root
* @return
*/
public List<List<Integer>> cen1(TreeNode root){
List<List<Integer>> lists=new ArrayList<>();
if (root==null){
return lists;
}

LinkedList<TreeNode> treeNodes=new LinkedList<>();
treeNodes.add(root);
while(!treeNodes.isEmpty()){
List<Integer> list=new ArrayList<>();
int size=treeNodes.size();
for (int i=0;i<size;i++){
TreeNode n=treeNodes.pop();
list.add(n.val);
if (n.l!=null){
treeNodes.add(n.l);
}
if (n.r!=null){
treeNodes.add(n.r);
}
}
lists.add(list);
}
List<List<Integer>> lists1=new ArrayList<>();
for(int i=lists.size()-1;i>=0;i--){
lists1.add(lists.get(i));
}
return lists1;
}