*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]
.
解法一:https://discuss.leetcode.com/topic/49400/1-ms-easy-understand-java-solution
O(n^2)
DFS
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> findLeaves(TreeNode root) { List<List<Integer>> leavesList = new ArrayList< List<Integer>>(); List<Integer> leaves = new ArrayList<Integer>(); while(root != null) { if(isLeave(root, leaves)) root = null; leavesList.add(leaves); leaves = new ArrayList<Integer>(); } return leavesList; } public boolean isLeave(TreeNode node, List<Integer> leaves) { if (node.left == null && node.right == null) { leaves.add(node.val); return true; } if (node.left != null) { if(isLeave(node.left, leaves)) node.left = null; } if (node.right != null) { if(isLeave(node.right, leaves)) node.right = null; } return false; } }