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:
- Removing the leaves
[4, 5, 3]
would result in this tree:
1
/
2
- Now removing the leaf
[2]
would result in this tree:
1
- Now removing the leaf
[1]
would result in the empty tree:
[]
Returns[4, 5, 3], [2], [1]
.
代码
class Solution {
public List<List<Integer>> findLeaves(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
helper(res, root);
return res;
}
private int helper (List<List<Integer>> res , TreeNode root){
if(root == null) return -1;
int left = helper (res, root.left);
int right = helper (res, root.right);
int level = Math.max(left, right) +1;
if(res.size() == level){
res.add(new ArrayList<>());
}
res.get(level).add(root.val);
// 删除操作
root.left = null;
root.right = null;
return level;
}
}