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 的思路是用DFS的方法,求出最大深度,每次都要在结果上加上相对应的值。
public IList<IList<int>> FindLeaves(TreeNode root) { var res = new List<IList<int>>(); if(root == null) return res; DFS(root,res); return res; } public int DFS(TreeNode root,IList<IList<int>> res ) { if(root == null) return -1; int a = 1+Math.Max(DFS(root.left,res), DFS(root.right,res)); if(a >= res.Count()) res.Add(new List<int>()); res[a].Add(root.val); return a; }
另一种解法是删除leaves。一直到root
public IList<IList<int>> FindLeaves(TreeNode root) { var res = new List<IList<int>>(); if(root == null) return res; while(root != null) { var cur = new List<int>(); root = DFS(root,cur); res.Add(cur); } return res; } public TreeNode DFS(TreeNode root,IList<int> res ) { if(root == null) return null; if(root.left == null && root.right == null) { res.Add(root.val); return null; } root.left = DFS(root.left, res); root.right = DFS(root.right,res); return root; }