leecode第16天

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
  1. 初始化变量 self.ans 用于存储二叉树直径的最大值。
  2. 定义递归函数depth,计算每个节点的深度,并更新直径长度:
    • 如果节点为空,返回深度为 0。
    • 递归计算左子树和右子树的深度。
    • 更新直径长度为左右子树深度之和的最大值。
    • 返回当前节点的最大深度(左右子树深度较大者加 1)。
  3. 调用 depth(root) 从根节点开始计算直径。
  4. 返回最终的直径长度 self.ans
开始
节点是否为空
返回深度为0
递归计算左子树深度
递归计算右子树深度
更新直径长度
返回当前节点最大深度
调用递归函数
返回直径长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值