您的位置:首页 > 其它

( Leetcode 107 ) Binary Tree Level Order Traversal II

2016-05-28 16:44 405 查看
题目: 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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: