zoukankan      html  css  js  c++  java
  • [leetcode]366. Find Leaves of Binary Tree捡树叶

    Given a binary tree, collect a tree's nodes as if you were doing this: Collect and remove all leaves, repeat until the tree is empty.

    Example:

    Input: [1,2,3,4,5]
      
              1
             / 
            2   3
           /      
          4   5    
    
    Output: [[4,5,3],[2],[1]]

    Explanation:

    1. Removing the leaves [4,5,3] would result in this tree:

              1
             / 
            2          

    2. Now removing the leaf [2] would result in this tree:

       1  

    3. Now removing the leaf [1] would result in the empty tree:

              []         

    题意:

    逐层移除二叉树的叶节点。

    Solution1: DFS

    解本题需要的背景知识: 【height】The height of a node is the number of edges from the node to the deepest leaf.

    For instance,

    node 1 has height of 2
    node 2 has height of 1
    node 4 has height of 0
    node 5 has height of 0
    node 3 has height of 0
    Based on the output, we need to gather up all the nodes with height 0, we then gather up all the nodes with height 1, and then all the nodes with height 2

    所以我们的target就是边traversal given tree边拿到each node's height, 把不同height的node放到result里

    code

     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 class Solution {
    11    public List<List<Integer>> findLeaves(TreeNode root) {
    12         List<List<Integer>> res = new ArrayList<>();
    13         helper(res, root);
    14         return res;
    15     }
    16     //helper function to return the height of current node
    17     private int helper(List<List<Integer>> res, TreeNode root) {
    18         if (root == null) return -1;
    19         int left = helper(res, root.left);
    20         int right = helper(res, root.right);
    21         int height = Math.max(left, right) + 1;
    22         if (res.size() == height) {
    23             res.add(new ArrayList<>());
    24         }
    25         res.get(height).add(root.val);
    26         return height;
    27     }
    28 }
  • 相关阅读:
    StarGAN v2
    STGAN
    Neo4j 图数据库查询
    StarGAN
    AttGAN
    分布式事务解决方案--Seata源码解析
    5分钟彻底了解Nginx的反向代理
    SpringBoot启动流程源码解析
    JAVA基础5--注解的实现原理
    Redis进阶三之底层存储数据结构及内存优化
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/10014700.html
Copyright © 2011-2022 走看看