leetcode 404. 左叶子之和 详细题解

题目:

计算给定二叉树的所有左叶子之和。

两种不同形式的递归解法:

两个解法都是基于递归的,只是形式不一样.
解法一需要一个全局变量,和一个额外的getSum()函数.这种写法的好处是使代码更加清晰易懂.
解法二则不需要额外的全局变量和函数.
总之两种写法思想都差不多,运行时间都是100%.具体代码分析请看注释.

解法一

int res = 0;//存储结果

public int sumOfLeftLeaves(TreeNode root) {
    if(root==null)//root为空直接返回0
        return res;
    getSum(root);//递归函数,求得结果
    return res;
}

public void getSum(TreeNode root) {
    if (root.left != null) {//root.left不能为空
        //root.left为左叶子
        if (root.left.left == null && root.left.right == null)
            res += root.left.val;//结果增加
        else//否则继续递归
            getSum(root.left);
    }
    if (root.right != null)//root.right不能为空
        getSum(root.right);
}

解法二

public int sumOfLeftLeaves(TreeNode root) {
    if (root == null)//root为空直接返回0
        return 0;
    //left存root的左子树的左叶子之和,right存右子树的左叶子之和
    //若root.left为左叶子,cur存root.left的值
    int left = 0, right = 0, cur = 0;
    //若root.left为左叶子
    if (root.left != null && root.left.left == null && root.left.right == null)
        cur = root.left.val;//存下这片左叶子的值
    else//否则继续递归
        left = sumOfLeftLeaves(root.left);//左子树值
    right = sumOfLeftLeaves(root.right);//右子树值
    return left + right + cur;//返回左子树值(若root.left非左叶子)+右子树值+root.left值(若root.
    left为左叶子)
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值