在数据结构教程中,树是一种非常重要的非线性结构。而“Java树直径”问题,是面试和算法竞赛中的经典题目之一。本文将用通俗易懂的方式,带你从零开始理解并实现二叉树直径算法,即使你是编程小白也能轻松掌握!
树的直径(也称为树的最长路径)是指树中任意两个节点之间最长路径的边数(或节点数,根据定义略有不同)。注意:这条路径不一定经过根节点!
要计算树的最长路径Java实现,我们可以利用深度优先搜索(DFS)的思想:
下面是一个完整的Java实现,包含注释帮助你理解每一步:
class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public class TreeDiameter { private int diameter = 0; // 全局变量,记录最大直径 public int diameterOfBinaryTree(TreeNode root) { if (root == null) return 0; depth(root); // 触发DFS return diameter; } // 返回当前节点的最大深度,并更新直径 private int depth(TreeNode node) { if (node == null) return 0; // 递归获取左右子树的深度 int leftDepth = depth(node.left); int rightDepth = depth(node.right); // 当前节点作为拐点的路径长度 = 左深度 + 右深度 diameter = Math.max(diameter, leftDepth + rightDepth); // 返回当前节点的最大深度(用于上层调用) return Math.max(leftDepth, rightDepth) + 1; }} 假设我们有如下二叉树:
1 / \ 2 3 / \ 4 5
最长路径是 [4 -> 2 -> 5] 或 [5 -> 2 -> 1 -> 3],但注意:直径定义为边的数量,所以 [4-2-5] 有2条边,[5-2-1-3] 有3条边,因此直径为3。
调用方式:
TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);TreeDiameter solver = new TreeDiameter();int result = solver.diameterOfBinaryTree(root);System.out.println("树的直径是: " + result); // 输出: 3 通过本篇数据结构教程,你已经掌握了如何用Java求解二叉树直径算法。核心思想是:在计算每个节点深度的同时,尝试将其作为路径的“最高点”,从而更新全局最长路径。这种“一边递归一边更新答案”的技巧,在树形DP中非常常见。
现在,你可以自信地应对任何关于Java树直径或树的最长路径Java的问题了!快去LeetCode上刷题巩固吧!
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125452.html