LeetCode 107. 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,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

 

posted @ 2017-07-03 00:41  Jimmy_Cheng  阅读(410)  评论(0编辑  收藏  举报