#leetcode404.所有左叶子节点之和

 这道题的要求是所有左叶子节点之和,即只要是左节点就应该被算在内,题解的答案真的是非常的简单粗暴,看一下:

public int sumOfLeftLeaves(TreeNode root) {

        if(root == null)
            return 0;
        if(isLeaf(root.left))
            return root.left.val + sumOfLeftLeaves(root.right);

        return sumOfLeftLeaves(root.left) + sumOfLeftLeaves( root.right);
    }

    public boolean isLeaf(TreeNode head) {
        if ( head == null)
            return false;

        return head.left==null && head.right ==null;
    }

不得不说,这道题的题解真的是太简单粗暴了,我什么时候能把递归用成这样就好了!

如果root是null的话 没有左子节点,所以直接返回0;

同样也是递归的出口,就是如果这个节点的左节点/右节点为null了,返回0就可以了,不用继续递归了。

而下面这句 if(isLeaf(root.left)) 就是在往下递归的过程中,碰到了左子节点就加起来,然后这时候只需要递归右边的节点就ok了,

如果不是左子节点的话,那么需要将左右都看成是本函数空间的根节点递归的进行计算。太妙了!

这段代码其实是从上往下递归计算的,和之前最大最小路径的从下往上递归计算思路上有所区别;

原文地址:https://www.cnblogs.com/kerwins-AC/p/14458668.html