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是否存在
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution 11 { 12 List<List<Integer>> res = new ArrayList<>(); 13 14 public List<List<Integer>> levelOrderBottom(TreeNode root) 15 { 16 if(root == null) 17 return res; 18 19 levelDown(root, 0); 20 21 Collections.reverse(res); 22 23 return res; 24 } 25 26 public void levelDown(TreeNode node, int level) 27 { 28 if(node == null) 29 return; 30 31 if(res.size() == level) // meaning this level list is empty, need to add new list 32 { 33 List<Integer> temp = new ArrayList<>(); 34 temp.add(node.val); 35 res.add(level, temp); 36 } 37 else 38 { 39 res.get(level).add(node.val); 40 } 41 42 levelDown(node.left, level+1); 43 levelDown(node.right, level+1); 44 45 return; 46 47 } 48 }
参考资料:N/A
LeetCode 算法题目列表 - LeetCode Algorithms Questions List