📅  最后修改于: 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
以上就是本程序的介绍和实现方法,通过递归的方式可以方便地计算二叉树的高度和深度,是一种常用的二叉树操作技巧。