543.二叉对的直径
# 给你一棵二叉树的根节点,返回该树的 直径 。
# 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
# 两节点之间路径的 长度 由它们之间边数表示。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def diameterOfBinaryTree(self, root):
"""
计算二叉树的直径,直径定义为树中任意两个节点之间最长路径的长度。
该路径可能经过根节点,也可能不经过。
:param root: 二叉树的根节点 (TreeNode 类型,可能为 None)
:return: 返回二叉树的直径长度 (int 类型)
"""
# 初始化变量 ans 用于存储最终的直径长度
self.ans = 0
# 定义递归函数 depth,用于计算每个节点的最大深度,并更新直径长度
def depth(node):
if not node:
return 0 # 如果节点为空,则返回深度为 0
# 递归计算左子树和右子树的深度
ldepth = depth(node.left)
rdepth = depth(node.right)
# 更新直径长度:当前节点的左右子树深度之和可能是最大直径
self.ans = max(self.ans, ldepth + rdepth)
# 返回当前节点的最大深度(左右子树深度较大者加 1)
return max(ldepth, rdepth) + 1
# 调用递归函数从根节点开始计算
depth(root)
# 返回最终的直径长度
return self.ans
- 初始化变量
self.ans
用于存储二叉树直径的最大值。 - 定义递归函数
depth
,计算每个节点的深度,并更新直径长度:- 如果节点为空,返回深度为 0。
- 递归计算左子树和右子树的深度。
- 更新直径长度为左右子树深度之和的最大值。
- 返回当前节点的最大深度(左右子树深度较大者加 1)。
- 调用
depth(root)
从根节点开始计算直径。 - 返回最终的直径长度
self.ans
。