在计算机科学和图论中,树的直径是指树中任意两个节点之间最长路径的长度。这个概念在很多实际问题中都有应用,比如网络延迟分析、文件系统优化等。本文将用通俗易懂的方式,教你如何使用Python树直径算法来求解树的最长路径。
树是一种无环的连通图。树的直径就是这棵树中任意两点间距离的最大值。注意:这里的“距离”指的是两点之间边的数量。

计算树的直径有一个经典且高效的算法,其核心思想是:
不过,在编程竞赛或面试中,更常用的是基于递归的“一次遍历”方法,通过后序遍历计算每个子树的高度,并在过程中更新最大直径。
我们先定义一个简单的二叉树节点类:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right接下来是核心算法。我们使用一个全局变量(或非局部变量)来记录当前遇到的最大直径:
def diameterOfBinaryTree(root): # 用于存储最大直径 max_diameter = 0 def depth(node): nonlocal max_diameter if not node: return 0 # 递归计算左右子树的高度 left_depth = depth(node.left) right_depth = depth(node.right) # 当前节点作为根时,经过它的最长路径 = 左高 + 右高 current_diameter = left_depth + right_depth # 更新全局最大直径 max_diameter = max(max_diameter, current_diameter) # 返回当前节点的高度(用于上层递归) return max(left_depth, right_depth) + 1 depth(root) return max_diameterdepth(node) 函数返回以 node 为根的子树的高度。max_diameter 记录所有节点中该值的最大者,这就是整棵树的直径。这个算法的时间复杂度是 O(n),其中 n 是树中节点的数量,因为我们只遍历每个节点一次。
# 构建如下二叉树:# 1# / \# 2 3# / \# 4 5root = TreeNode(1)root.left = TreeNode(2)root.right = TreeNode(3)root.left.left = TreeNode(4)root.left.right = TreeNode(5)print(diameterOfBinaryTree(root)) # 输出:3(路径为 4 -> 2 -> 1 -> 3 或 5 -> 2 -> 1 -> 3)通过本文,你已经掌握了如何用 Python 实现树的最长路径(即树的直径)的计算。无论是面试题还是实际项目中的图论算法Python实现,这个技巧都非常实用。记住,关键在于理解“每个节点的直径 = 左子树高度 + 右子树高度”,并通过一次遍历完成计算。
希望这篇关于Python树直径算法的教程对你有帮助!动手写一写代码,加深理解吧。
本文由主机测评网于2025-12-28发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251213433.html