leetcode 366 Find Leaves of Binary Tree

常规思路就是走一遍dfs找出叶子节点,记录,删除叶子节点,反复直到树空,时间复杂度为o(n!)

但是,我们可以通过记录当前节点到叶子节点的距离,来完成题目要求,只需要一遍dfs,时间复杂度为o(n)

public List<List<Integer>> res;
public List<List<Integer>> findLeaves(TreeNode root){
    res = new ArrayList<>();
    if(root == null)
        return res;
    dfs(root);
    return res;
}
private int dfs(TreeNode root){
    if(root == null)
        return 0;
    int left = dfs(root.left);
    int right = dfs(root.right);
    int depth = Math.max(left, right) + 1;
    if(depth > res.size()){
        res.add(new ArrayList<>(){root.val});
    }else{
        res.get(depth-1).add(root.val);
    }
    return depth;
} 

 

posted @ 2019-08-16 01:07  南山南北秋悲  阅读(159)  评论(0编辑  收藏  举报