• 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

  • 相关阅读:
    一步一步教你elasticsearch在windows下的安装
    Query DSL for elasticsearch Query
    [转] webpack之前端性能优化(史上最全,不断更新中。。。)
    [转] Javascript模块化编程(一):模块的写法
    [转] 2016 JavaScript 发展现状大调查
    [转] 前端性能的几个基础指标
    [转] 视频直播前端方案
    [转] Web前端开发工程师常用技术网站整理
    [转] getBoundingClientRect判断元素是否可见
    [转] js前端解决跨域问题的8种方案(最新最全)
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7108689.html
Copyright © 2020-2023  润新知