题目: Binary Tree Level Order Traversal II
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] ]
解题思路:
这道题和 Binary Tree Level Order Traversal 基本相同,不同的是两个最后输出不同,这道题我还是采用层次遍历发来遍历,所不同的是最后链表采用头插法,这样就不用最后对链表进行逆转,自然实现了反转的效果。还有一点是设置一个队列来实现层次遍历,通过队列的 size 来实现控制每层开始和结束的目的。
具体的看下面的Java代码:
public class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List list = new ArrayList();
if( root == null ){
return list;
}
ArrayDeque<TreeNode> que = new ArrayDeque<TreeNode>();
que.offer( root );
while( !que.isEmpty() ){
List<Integer> level = new ArrayList<Integer>();
int size = que.size();
for( int i = 0; i < size; ++i ){
TreeNode head = que.poll();
level.add( head.val );
if( head.left != null ){
que.offer( head.left );
}
if( head.right != null ){
que.offer( head.right );
}
}
list.add( 0, level ); //每次从list头插入,相当于自然实现了反转的效果
}
return list;
}
}