📜  编写一个程序来找到一棵树的最大深度或高度(1)

📅  最后修改于: 2023-12-03 14:56:57.504000             🧑  作者: Mango

编写一个程序来找到一棵树的最大深度或高度

树是一种非常常用的数据结构,因为它可以用来描述层级关系,比如文件目录结构、网站导航菜单等等。在处理树结构时,经常需要计算树的深度或高度,本文将介绍如何用 Python 编写一个程序来找到一棵树的最大深度或高度。

树的深度和高度

树的深度指的是根节点到叶子节点的最长路径的长度,也可以说是树中节点的最大层数。树的高度指的是树中最长路径的长度,也就是树的深度减去一。

这两个概念很相似,但有一个不同点:深度是从上往下数,高度是从下往上数。下图展示了一个二叉树的深度和高度:

     A
    / \
   B   C
  /     \
 D       E
        /
       F
  • 树的深度为 3,因为从根节点 A 到叶子节点 D 的路径最长,长度为 3。
  • 树的高度为 2,因为从叶子节点 D 到根节点 A 的路径最长,长度为 2。
算法思路

计算树的深度或高度可以使用递归算法。我们可以将树分解为根节点和两棵子树,分别求它们的深度或高度,最终的答案就是左右子树中的最大值加一。

具体来说,递归算法包括以下步骤:

  1. 如果根节点为空,返回 0。
  2. 否则,递归计算左子树的深度或高度 left_depth。
  3. 递归计算右子树的深度或高度 right_depth。
  4. 返回 left_depth 和 right_depth 中的最大值加一,即为树的深度或高度。

以下是 Python 的递归实现:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def max_depth(root: TreeNode) -> int:
    if not root:
        return 0
    left_depth = max_depth(root.left)
    right_depth = max_depth(root.right)
    return max(left_depth, right_depth) + 1
测试用例

为了验证算法的正确性,我们需要准备一些测试用例。下面是几个测试用例:

root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

assert max_depth(root) == 3
root = TreeNode(1)
assert max_depth(root) == 1
assert max_depth(None) == 0
总结

本文介绍了如何用 Python 编写一个程序来找到一棵树的最大深度或高度。根据上述算法,我们可以递归计算树的深度或高度,并且可以用几个简单的测试用例验证算法的正确性。