救救孩子吧,递归硬是,没搞懂

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

示例:

3
/ \
9  20
/  \
15   7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if (root == null) {
            return 0;
        }
        //这里为何使用局部变量,全局变量就不行
        int sum = 0;
        if (isLeftLeave(root.left)) {
            sum += root.left.val;
        } else {
            sum += sumOfLeftLeaves(root.left);
        }
        sum += sumOfLeftLeaves(root.right);
        return sum;
    }

    private boolean isLeftLeave(TreeNode treeNode) {
        return treeNode != null && (treeNode.left == null && treeNode.right == null);
    }
}
而像leetCode 563,求坡度就用全局变量,个人认为全局变量能理解。但这里为何递归sum要归零啊

#leetcode#
全部评论
局部变量使得每一个子程序会有一个单独的变量 但是如果使用全局变量 你的sum只会越来越大。
点赞 回复 分享
发布于 2019-11-03 21:36
你用了全局变量之后,递归的函数内部把sum加了一次,递归函数返回的数字把sum又加了一次,这就不对了吧。 你就想这种情况      1   / 2 你应该就加了两个2
点赞 回复 分享
发布于 2019-11-03 21:37
全局变量也可以 但是全局变量就不需要返回了,直接加, 对于为什么要int sum =0,是因为假设递归到叶子那一层,此时sum当然为0啊,然后加到上一层的sum接着一直往上....联想一下这个过程就OK
点赞 回复 分享
发布于 2019-11-03 21:40
sum不是归零,而是子过程中新的sum
点赞 回复 分享
发布于 2019-11-03 22:00
leetCode 563:二叉树的坡度 给定一个二叉树,计算整个树的坡度。 一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值。空结点的的坡度是0。 整个树的坡度就是其所有节点的坡度之和。 示例: 输入:          1        /   \       2     3 输出: 1 解释: 结点的坡度 2 : 0 结点的坡度 3 : 0 结点的坡度 1 : |2-3| = 1 树的坡度 : 0 + 0 + 1 = 1 public class Solution {     //此时是成员变量     int tilt=0;     public int findTilt(TreeNode root) {         traverse(root);         return tilt;     }     public int traverse(TreeNode root)     {         if(root==null )             return 0;         int left=traverse(root.left);         int right=traverse(root.right);         tilt+=Math.abs(left-right);         return left+right+root.val;     } } 这又怎么看
点赞 回复 分享
发布于 2019-11-03 22:07
每个递归过程都有一个sum,你也可以用全局变量,只不过没有返回值了
点赞 回复 分享
发布于 2019-11-03 22:08
不用全局变量这么改,通过了
点赞 回复 分享
发布于 2019-11-03 22:25

相关推荐

点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 5 评论
分享
牛客网
牛客企业服务