LeetCode 543. Diameter of Binary Tree【Java】

题目描述

二叉树的直径

AC代码

枚举经过每一个节点的路径最大值,根据这个值去更新全局的直径,最终得到的就是直径。左右两边的子树是独立的,那么想要获得当前节点的路径最大值,只需要求出来左边路径的最大值和右边路径的最大值,然后相加就可以了,其实就是求左右子树的深度之和。
注意:题目中也提到了,不一定要经过根节点。
LeetCode 543. Diameter of Binary Tree【Java】_第1张图片

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
     
    int len=0;
    public int diameterOfBinaryTree(TreeNode root) {
     
        dfs(root);
        return len;
    }

    int dfs(TreeNode root){
     
        if(root==null)
            return 0;
        int left=dfs(root.left);
        int right=dfs(root.right);
        //更新最长的直径
        len=Math.max(len,left+right);
        //从当前节点往下走的最大值(从这个点向下往左和往右走中取最大的)
        return Math.max(left+1,right+1);
    }
}

你可能感兴趣的:(leetcode)