LeetCode Hot 100 No.543 二叉树的直径

在这里插入图片描述
思路:
用递归的思想。
一棵树经过根节点的最大直径=其左子树的最大深度(递归)+ 右子树的最大深度(递归)。

这里可能会不理解:
一棵树经过根节点的最大直径其实等于左子树的最深路径+右子树的最深路径+根节点到左右子结点的路径。
一棵树的深度是指从根节点到最深的叶子结点经过的节点数。但是这条路径的长度等于深度-1。
比如 1—>2—>3—>4。这条路径经过的节点数为4,但路径长度为4-1=3。
所以左子树的最大深度-1等于左子树的最深路径,右子树的最大深度-1等于右子树的最深路径。
当左右子树都存在时,一棵树经过根节点的最大直径=左子树的最大深度-1+右子树的最大深度-1+2 = 左子树的最大深度+右子树的最大深度。
当左右子树只有一个存在时,一棵树经过根节点的最大直径 = 左/右子树的最大深度-1 + 1 = 左/右子树的最大深度。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int Max = 0;//全局变量,记录当前的最大直径
    public int maxRoute(TreeNode root)//该函数用来找出当前树经过根节点的最大直径,返回当前树的最大深度
    {
        if(root==null)//根节点为空,深度为0
            return 0;
        if(root.left==null&&root.right==null)//根节点的左右子树为空,深度为1
            return 1;
        int L = maxRoute(root.left);//递归遍历左子树的最大深度
        int R = maxRoute(root.right);//递归遍历右子树的最大深度
       	int max = L+R;//经过根节点的最大直径
        if(max>Max) Max = max;
        return 1 + Math.max(L,R);
    }
    public int diameterOfBinaryTree(TreeNode root) {
        maxRoute(root);
        return Max;
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值