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]
.
public class Solution {
public List<List<Integer>> findLeaves(TreeNode root){
List<List<Integer>> res = new ArrayList<List<Integer>>();
if (root == null) {
return res;
}
find(res, root);
return res;
}
private int find(List<List<Integer>> res,TreeNode node){
if(node==null){
return -1; //list从0取起,所以叶子节点的height为0而不是为1
}
int height=1+Math.max(find(res,node.left),find(res,node.right));
if(res.size()<height + 1) {
res.add(new ArrayList<Integer>());
}
res.get(height).add(node.val);
// if need to actually remove the leaves, uncomment next line
// node.left = node.right = null;
return height;
}
}