参考:点击打开链接
这道题换句话说就是找每个node的index,这个index就是最后结果中这个节点所在的list的index,比如4,5,3的index是0, 2的index是1,1的index是2.
怎么找呢?二分,看左,看右。
确定一个点的index,得知道他的左孩子index是多少,右孩子的index是多少,当前这个点的index是他左右孩子的index最大值+1,这可以很容易地观察得到。比如对于1来说,左孩子2的index是1,右孩子3的index是0,那1的index肯定是max(1, 0) + 1,即2.
/**
* 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>> res = new LinkedList<>();
if (root == null) {
return res;
}
getLeaves(root, res);
return res;
}
private int getLeaves(TreeNode root, List<List<Integer>> res) {
if (root == null) {
return -1;
}
int left = getLeaves(root.left, res);
int right = getLeaves(root.right, res);
int index = Math.max(left, right) + 1;
if (index < res.size()) {
res.get(index).add(root.val);
} else {
List<Integer> list = new LinkedList<>();
list.add(root.val);
res.add(list);
}
return index;
}
}