📅  最后修改于: 2023-12-03 15:10:51.767000             🧑  作者: Mango
满二叉树(Full Binary Tree)是指在一颗二叉树中,除了叶子结点外,每个结点都有左右子树,并且左右子树的结点数相等。也就是说,满二叉树的每一层都被完全填满,可表示为一个满的二叉树。
下图为满二叉树的示例:
检查二叉树是否为满二叉树,需要用到以下两个特性:
因此,我们可以写出以下递归代码片段:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def is_full_binary_tree(root: TreeNode) -> bool:
"""检查二叉树是否为满二叉树"""
if not root:
return True
left_height = get_height(root.left)
right_height = get_height(root.right)
if left_height == right_height:
return is_full_binary_tree(root.left) and is_full_binary_tree(root.right)
return False
def get_height(node: TreeNode) -> int:
"""计算二叉树的高度"""
if not node:
return 0
return 1 + max(get_height(node.left), get_height(node.right))
由于要递归遍历整个二叉树,因此时间复杂度为 $O(n)$。
由于递归调用时需要使用栈空间,空间复杂度为 $O(h)$,其中 $h$ 为二叉树的高度。如果是满二叉树,则 $h = log_2n$。