Leetcode 366: Find Leaves of Binary Tree

Posted Keep walking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:
Given binary tree 

          1
         /         2   3
       / \     
      4   5    

 

Returns [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:

          []         

 

 

Returns [4, 5, 3], [2], [1].

 

 

 

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     public int val;
 5  *     public TreeNode left;
 6  *     public TreeNode right;
 7  *     public TreeNode(int x) { val = x; }
 8  * }
 9  */
10 public class Solution {
11     public IList<IList<int>> FindLeaves(TreeNode root) {
12         var result = new List<IList<int>>();
13         if (result == null) return result;
14         
15         Height(root, result);
16         return result;
17     }
18     
19     private int Height(TreeNode node, IList<IList<int>> result)
20     {
21         if (node == null) return -1;
22         int h = 1 + Math.Max(Height(node.left, result), Height(node.right, result));
23         
24         if (h >= result.Count)
25         {
26             result.Add(new List<int>());
27         }
28         
29         result[h].Add(node.val);
30         
31         return h;
32     }
33 }
34 
35 public class Solution1 {
36     public IList<IList<int>> FindLeaves(TreeNode root) {
37         var result = new List<IList<int>>();
38         if (result == null) return result;
39         
40         var leaves = new HashSet<TreeNode>();
41         leaves.Add(null);
42         
43         while (!leaves.Contains(root))
44         {
45             var list = new List<int>();
46             DFS(root, leaves, list);
47             result.Add(list);
48         }
49         
50         return result;
51     }
52     
53     private void DFS(TreeNode node, HashSet<TreeNode> leaves, IList<int> result)
54     {
55         if (leaves.Contains(node)) return;
56         if (leaves.Contains(node.left) && leaves.Contains(node.right))
57         {
58             result.Add(node.val);
59             leaves.Add(node);
60             return;
61         }
62         
63         DFS(node.left, leaves, result);
64         DFS(node.right, leaves, result);
65     }
66 }

 


以上是关于Leetcode 366: Find Leaves of Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 366. Find Leaves of Binary Tree

366. Find Leaves of Binary Tree

366. Find Leaves of Binary Tree

366. Find Leaves of Binary Tree

366. Find Leaves of Binary Tree C#

LeetCode Find Leaves of Binary Tree