七七老师の白日梦
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面

二叉树的直径:递归自己找直径

写作时间:2026-07-30 10:23:40

给你一棵二叉树的根节点,返回该树的 直径 。

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

需求

  • 返回直径
  • 长度由变数表示

实现

  • 递归

代码

class Solution {
    int maxDiameter = 0;

    /**
     * 计算二叉树的直径
     * @param root 二叉树根节点
     * @return 二叉树的直径长度
     */
    public int diameterOfBinaryTree(TreeNode root) {
//        直径归零,递归调用时更新
        maxDiameter = 0;
//        干活的函数
        maxDepth(root);
        return maxDiameter;
    }

    /**
     * 计算以当前节点为根的最大深度,并更新全局最大直径
     * @param node 当前节点
     * @return 以当前节点为根的子树的最大深度
     */
    private int maxDepth(TreeNode node) {
//        递归停止条件
        if (node == null) {
            return 0;
        }
//        左右实现遍历
        int leftDepth = maxDepth(node.left);
        int rightDepth = maxDepth(node.right);
        // 经过当前节点的最长路径 = 左子树深度 + 右子树深度
        maxDiameter = Math.max(maxDiameter, leftDepth + rightDepth);
//        告诉父节点,返回当前节点的深度
        return Math.max(leftDepth, rightDepth) + 1;
    }
}

‍

avatar

七七老师

分享代码日常

RECOMMENDED

七七旧事:复盘并改变写博客的方式

2026-07-02 22:54:38

字母异位词

2026-07-04 22:22:08

寻找两个正序数组的中位数:合并与二分

2026-07-08 15:56:26

Table of Contents