📜  用于计算二叉树中节点的高度和深度的程序(1)

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

用于计算二叉树中节点的高度和深度的程序

本程序是用于计算二叉树中节点的高度和深度的,是一种常见的二叉树操作。在计算二叉树的高度时,我们需要遍历整棵树,找到树中最深的叶子节点,统计其路径的长度即可;而在计算深度时,则是统计某个指定节点到根节点的路径长度。

方法介绍

本程序的实现方法是递归法,通过递归函数对每个节点进行遍历,并计算其高度和深度,最终统计得到整棵树的高度和深度。因此,本程序的时间复杂度为O(n),其中n为二叉树中节点的数量。

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

class Solution:
    def getHeight(self, root: TreeNode) -> int:
        # 计算二叉树的高度
        if not root:
            return 0
        left_height = self.getHeight(root.left)
        right_height = self.getHeight(root.right)
        return max(left_height, right_height) + 1

    def getDepth(self, root: TreeNode, target: TreeNode) -> int:
        # 计算指定节点的深度
        if not root:
            return -1
        if root == target:
            return 0
        left_depth = self.getDepth(root.left, target)
        if left_depth != -1:
            return left_depth + 1
        right_depth = self.getDepth(root.right, target)
        if right_depth != -1:
            return right_depth + 1
        return -1
使用示例

例如,假设我们要计算以下二叉树的高度和深度:

    1
   / \
  2   3
 / \   \
4   5   6

则可以按照如下方式进行计算:

# 创建二叉树
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.right = TreeNode(6)

# 计算二叉树的高度
s = Solution()
height = s.getHeight(root)
print("该二叉树的高度为:", height)

# 计算指定节点的深度
depth = s.getDepth(root, root.left.right)
print("节点{}的深度为:{}".format(root.left.right.val, depth))

程序的运行结果为:

该二叉树的高度为: 3
节点5的深度为:2

以上就是本程序的介绍和实现方法,通过递归的方式可以方便地计算二叉树的高度和深度,是一种常用的二叉树操作技巧。