543. 二叉树的直径(递归)


543. 二叉树的直径

题目

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

在这里插入图片描述

解题思路

这题还是在 求子树最大深度的基础上改造。求出来每个节点的左子树最大深度 和右子树最大深度后,把这两个深度加起来 就是“两个结点路径长度中的最大值”。这样再定义一个成员变量max来保存最大的那个路径长度。

在每一次把每一个节点的左右子树的两个最大深度加起来后都把max和这个最大深度和进行比较,取大的值作为max。让max始终维护 节点路径长度最大,最后返回max即可。

代码


class Solution {
    int max=0;
    public int diameterOfBinaryTree(TreeNode root) {
        MaxDepth(root);
        return   max ;

    }

    public int MaxDepth(TreeNode root){
        if(root==null){
            return 0;
        }

        int left=MaxDepth(root.left);
        int right=MaxDepth(root.right);
        max=Math.max(left+right,max);//将每个节点最大直径(左子树深度+右子树深度)和当前最大值比较并取大者。也就是max始终只保留最长的路径

        return Math.max(left,right)+1;
    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录