( 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
return its bottom-up level order traversal as:
解题思路:
这道题和 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;
}
}
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;
}
}
相关文章推荐
- 【java并发】传统线程互斥技术—synchronized
- 【克罗地亚】pjesma
- 中介者模式和php实现
- 恒生笔试2017届
- hibernate的SessionFactory的getCurrentSession 与 openSession() 的区别
- getimagesizefromstring
- HDU 1040 排序
- Java\Scala\Python三种语言求解经典编程实例(二)—— 尾数前移
- Leetcode no. 153
- HDU 1039 判断字符串的合法性
- HIbernate聚合函数和分组查询(学习笔记)
- 深入理解js数组的sort排序
- 【克罗地亚】NIKOLA
- android framebuffer adb pull
- openSession()和getCureentSession()的区别
- 一个表单提交操作的编码格式问题
- 1036: [ZJOI2008]树的统计Count 【树链剖分】【点权:单点更新区间求值】
- 剑指offer面试题7(java实现)
- 网龙现场笔试电话面试经历
- Android菜单详解(五)——使用XML生成菜单