LeetCode 107. Binary Tree Level Order Traversal II (二叉树阶层顺序遍历之二)
2017-07-03 00:41
302 查看
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,null,null,15,7],
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
题目标签:Tree 先来说点有的没的,这是美国的一个长周末,国庆节,大家都出去到处野到处浪了,嗯,我在刷题找工作。玩还是要玩的,一周一天吧,一次出去个3,4天目前心里不踏实,玩不出劲来呢! 回到题目, 这道题目给了我们一个二叉树,让我们返回一个list<list>,每一个子list 包含一个level的所有点的值,总list 的顺序是从树的底部到顶部。那么我们需要另外一个function 叫 levelDown, 从树的top开始遍历到bottom(preOrder),这个function 除了node, 还有一个带入值,就是level 的值,(0,1,2,。。。) 这样就可以让每一个点确定它在哪个level,对于每一个点,把它的值存进相对应的level的那个子list就可以了。不过要注意的是,因为原来总list里都是空的,一个子list也没有,所以当遇到一个新的level的时候,要加入新的子list,当之后另外同样level的点加入的时候,需要先get到这个子list,然后在子list里加入。所以对于每一个点,需要判断一下,属于它level的list 有没有,没有就加个新的list,有就get到直接加入。 最后完成了总list,把list reverse一下就可以了。
Java Solution:
Runtime beats 71.19%
完成日期:07/02/2017
关键词:Tree
关键点:把树的level值代入recursive function;对于每一个点,需要判断属于它的子list是否存在
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> levelOrderBottom(TreeNode root) { if(root == null) return res; levelDown(root, 0); Collections.reverse(res); return res; } public void levelDown(TreeNode node, int level) { if(node == null) return; if(res.size() == level) // meaning this level list is empty, need to add new list { List<Integer> temp = new ArrayList<>(); temp.add(node.val); res.add(level, temp); } else { res.get(level).add(node.val); } levelDown(node.left, level+1); levelDown(node.right, level+1); return; } }
参考资料:N/A
LeetCode 算法题目列表 - LeetCode Algorithms Questions List
相关文章推荐
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
- 【LeetCode】102. Binary Tree Level Order Traversal-二叉树水平顺序遍历
- [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二
- LeetCode 102 Binary Tree Level Order Traversal(二叉树的层级顺序遍历)(*)
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
- 【LeetCode】107. Binary Tree Level Order Traversal II-二叉树水平顺序遍历2
- LeetCode Binary Tree Postorder Traversal(二叉树的后序遍历 非递归实现)
- LeetCode Binary Tree Preorder Traversal 前序遍历二叉树 递归和非递归解法
- 二叉树三种顺序遍历应用
- 快速写出二叉树的遍历顺序
- 1489 求二叉树的先序遍历 1291 数据结构上机测试4.1:二叉树的遍历与应用1【二叉树遍历顺序转换】
- 二叉树系列文章之二 二叉树的递归遍历
- leetcode:Populating Next Right Pointers in Each Node II (顺序连接二叉树每一层节点)【面试算法题】
- 用二叉树的后序遍历来看oracle执行计划的执行顺序
- 【leetcode Java】二叉树的递归遍历以及最大深度的求解(Java)
- 顺序结构实现二叉树的建立和各种遍历
- Binary Tree Level Order Traversal 分层遍历二叉树@LeetCode
- 数据结构--二叉树--层次遍历二叉树(顺序遍历)
- 二叉树的顺序存储和三种遍历(二)
- 卡特兰数--前序遍历对应的二叉树/进栈顺序对应的出栈顺序