404. 左叶子之和

174 阅读1分钟

写法2

class Solution {
    int res = 0;
    public int sumOfLeftLeaves(TreeNode root) {
        dfs(root, false);
        return res;
    }
    
     //加一个isLeft来判断是不是左边的叶子
    public void dfs(TreeNode node, boolean isLeft) {
        if (node == null) {
            return;
        }
        if (node.left == null && node.right == null && isLeft) { // 找到了左叶子结点
            res += node.val;
            return;
        }
        dfs(node.left, true);
        dfs(node.right, false);
    }
}

写法1

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        return sum(root, false);
    }
    //加一个flag来判断是不是左边的叶子
    public int sum(TreeNode root, boolean flag) {
        if (root == null) {
            return 0;
        }
        //如果是叶子节点
        if (root.left == null && root.right == null) {
            return flag ? root.val : 0;//右边的返回0,左边的返回val
        }
        int sumLeft = sum(root.left, true);
        int sumRight = sum(root.right, false);
        return sumLeft + sumRight;
    }
}