树与图简单1 种解法

#543二叉树的直径

返回二叉树任意两节点间最长路径的边数。

#二叉树#深度优先搜索#后序遍历

解题主线

01

经过某节点的最长路径边数等于左右子树高度之和。

解法 1后序高度与局部答案

后序返回高度,同时用方法内数组更新所有节点的左右高度和。

时间复杂度

O(n)

空间复杂度

O(h)

543. 二叉树的直径 · 后序高度与局部答案
import java.util.*;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val) {
        this.val = val;
    }
}

class Solution {
    public int diameterOfBinaryTree(TreeNode root) {
        int[] diameter = new int[1];
        height(root, diameter);
        return diameter[0];
    }

    private int height(TreeNode node, int[] diameter) {
        if (node == null) return 0;
        int left = height(node.left, diameter);
        int right = height(node.right, diameter);
        diameter[0] = Math.max(diameter[0], left + right);
        return Math.max(left, right) + 1;
    }
}

后序返回高度,同时用方法内数组更新所有节点的左右高度和。

边界与易错点

  • 答案按边计数,而高度递归按节点层数返回。
  • 最大直径必须在每次公开方法调用时重置。
整理来源

由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。

leetcode/src/main/java/tree/Q543_tree_diameter.java