📅  最后修改于: 2023-12-03 14:56:53.196000             🧑  作者: Mango
最小堆是满足以下两个条件的二叉树:
我们可以通过给定二叉树的层序遍历来检查该树是否为最小堆。
我们可以按层序遍历的顺序,从上到下、从左到右逐个比较节点的值。
对于一颗有n个节点的二叉树,我们需要遍历每一个节点来检查是否满足最小堆的条件,因此时间复杂度为O(n)。
下面给出了Python语言的代码实现示例:
from typing import List
def is_min_heap(nums: List[int]) -> bool:
"""
检查给定二叉树的层序遍历是否为最小堆
"""
n = len(nums)
# 检查非叶子节点是否满足条件一
for i in range(n // 2):
left = nums[2 * i + 1]
right = nums[2 * i + 2]
if nums[i] > left or (right < n and nums[i] > right):
return False
# 检查叶子节点所在层是否满足条件二
leaf_start = 2 ** ((n - 1).bit_length() - 1)
leaf_end = n
for i in range(leaf_start, leaf_end):
if nums[i] is not None and (2 * i + 2 < leaf_end):
return False
return True
代码中的变量nums
为按层序遍历得到的二叉树节点值的列表,其中若某个节点为空,用None代替。函数返回True表示该二叉树为最小堆,返回False表示不是。