543. 二叉树的直径

142 阅读1分钟

image.png

思路

  • 直径 = 边数
  • 直径不一定过圆心,所以需要遍历整棵树
  • 利用左右子树的最大深度来解决,同步更新最大直径
class Solution {
    int maxDiam = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        maxDepth(root); 
        return maxDiam;
    }
    public int maxDepth(TreeNode node) {
        if(node == null) {
            return 0;
        }
        int depthLeft = dfs(node.left);//当前节点的左侧深度
        int depthRight = dfs(node.right);//当前节点的右侧深度
        maxDiam = Math.max(depthRight + depthLeft, maxDiam);
        return Math.max(depthLeft, depthRight) + 1;//当前节点的深度
    }
}