📜  数据结构|树遍历|问题12(1)

📅  最后修改于: 2023-12-03 15:40:01.381000             🧑  作者: Mango

数据结构 | 树遍历 | 问题12

问题描述

给定一个二叉树,返回其结点之间的最大距离。

最大距离的定义是两个结点之间路径长度的最大值。

注意:路径长度是指路径上的结点数减一,例如路径上有3个结点,则路径长度为2。

解法

通过遍历二叉树,求出每个结点的左右子树深度(路径长度),最后求出最大深度之和即可。

具体做法如下:

  1. 如果根节点为空,则最大深度为0。
  2. 递归调用求出左子树深度和右子树深度。
  3. 比较左右子树深度之和与当前最大深度之和,取较大值为最大深度之和。

实现代码如下:

class Solution:
    def __init__(self):
        self.max_depth = 0

    def max_distance(self, root: TreeNode) -> int:
        if not root:
            return 0
        self.depth(root)
        return self.max_depth

    def depth(self, root: TreeNode) -> int:
        if not root:
            return 0
        left_depth = self.depth(root.left)
        right_depth = self.depth(root.right)
        self.max_depth = max(self.max_depth, left_depth + right_depth)
        return max(left_depth, right_depth) + 1
总结

这道题目可以通过遍历二叉树来解决,使用递归可以轻松地求出每个结点的深度。最终求出深度之和的最大值即可得到所求的答案。需要注意,路径长度是指路径上的结点数减一。