【leetCode】leetcode 543 二叉树的直径

https://leetcode-cn.com/problems/diameter-of-binary-tree/

【肤浅如我,通过这道题,才学会了在一个函数中修改全局变量,在另一个函数中调用那个函数,返回被修改的全局变量值。】

题目描述:

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

示例 :
给定二叉树

          1
         / \
        2   3
       / \     
      4   5    
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

说出来你可能不信,看到树的题目,我能想到左右子树遍历,而且想到结果的产生点:每个节点求其左右子节点的高度之和,这些和的最大值就是最后的返回值。

但是我想不到如何返回值:而且对于每一个节点,需要保留两个值,一个是当前节点自己的最大高度,用于给父节点返回值用,另一个是他的左右子树的高度和,保留这个值,每次做替换保留最大值,最后返回的是这个值。但是自己的高度和这个左右子树的高度和我不知道该返回谁了,不知道是该写在主调用函数里还是辅助函数里。一看答案明白了,我的思路是对的,就是对函数结构不清楚:用全局变量保留要返回的值(这个我想到了),在辅助函数里更新这个全局变量,但是作为递归函数去返回每个节点自己的高度。 主调用函数里调用辅助函数更新全局变量,然后返回全局变量。

看代码

class Solution {
    int res;
    public int diameterOfBinaryTree(TreeNode root) {
        res=0;
        heightOfTree(root); //更新全局变量
        return res; //返回全局变量
    }
    public int heightOfTree(TreeNode node) {
        if(node==null) return 0;
        int height_left=heightOfTree(node.left);
        int height_right=heightOfTree(node.right);
        res=Math.max(res,height_left+height_right); //更新全局变量
        return Math.max(height_left,height_right)+1; //返回本函数关注的树高
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值