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

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#
全部评论
不用全局变量这么改,通过了
点赞 回复 分享
发布于 2019-11-03 22:25
每个递归过程都有一个sum,你也可以用全局变量,只不过没有返回值了
点赞 回复 分享
发布于 2019-11-03 22:08
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不是归零,而是子过程中新的sum
点赞 回复 分享
发布于 2019-11-03 22:00
全局变量也可以 但是全局变量就不需要返回了,直接加, 对于为什么要int sum =0,是因为假设递归到叶子那一层,此时sum当然为0啊,然后加到上一层的sum接着一直往上....联想一下这个过程就OK
点赞 回复 分享
发布于 2019-11-03 21:40
你用了全局变量之后,递归的函数内部把sum加了一次,递归函数返回的数字把sum又加了一次,这就不对了吧。 你就想这种情况      1   / 2 你应该就加了两个2
点赞 回复 分享
发布于 2019-11-03 21:37
局部变量使得每一个子程序会有一个单独的变量 但是如果使用全局变量 你的sum只会越来越大。
点赞 回复 分享
发布于 2019-11-03 21:36

相关推荐

06-27 18:45
中山大学 Ruby
25届应届毕业生,来广州2个礼拜了,找不到工作,绝望了,太难过了…
应届想染班味:9爷找不到工作只能说明,太摆了或者太挑了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-25 20:45
点赞 评论 收藏
分享
06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
_mos_:我以为手抄报简历就已经很顶了,没想到还有表格简历
点赞 评论 收藏
分享
评论
点赞
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务