Given the root of a binary tree, collect a tree's nodes as if you were doing this:
Collect all the leaf nodes.
Remove all the leaf nodes.
Repeat until the tree is empty.
Example 1:
**Input:** root = [1,2,3,4,5]
**Output:** [[4,5,3],[2],[1]]
Explanation:
[[3,5,4],[2],[1]] and [[3,4,5],[2],[1]] are also considered correct answers since per each level it does not matter the order on which elements are returned.
Example 2:
**Input:** root = [1]
**Output:** [[1]]
Constraints:
The number of nodes in the tree is in the range [1, 100].
-100 <= Node.val <= 100
ac
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution {publicList<List<Integer>> findLeaves(TreeNode root) {Map<Integer,List<Integer>> map =newHashMap<>();dfs(root, map);List<List<Integer>> res =newArrayList<>();for (int i =1; i <=map.size(); i++) {res.add(map.get(i)); }return res; }publicintdfs(TreeNode node,Map<Integer,List<Integer>> map) {if (node ==null) return0;int left =dfs(node.left, map);int right =dfs(node.right, map);int dist =Math.max(left, right) +1;map.putIfAbsent(dist,newArrayList<>());map.get(dist).add(node.val);return dist; }}/*1) dfs get distance to leaf, store in map; 2) iterate map, get result*/