📌  相关文章
📜  从给定的数组以级别顺序方式构造一个完整的二叉树(1)

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

构造完整二叉树的代码示例

这是一个用于构造完整二叉树的示例程序,它接受一个给定的数组,并按照级别顺序构造一个完整的二叉树。完整二叉树是指除了最后一层外,其他每一层的节点都被完全填充,并且所有节点都尽可能地向左靠拢。

实现思路
  1. 首先计算给定数组的长度 n,并确定完整二叉树的层数 h。
  2. 创建一个长度为 n 的数组 tree,用于存储完整二叉树的节点。
  3. 遍历给定数组的每个元素,依次将其存储在 tree 数组中的对应位置。
  4. 对于节点 tree[i],其左子节点位于 tree[2i+1],右子节点位于 tree[2i+2]。注意要判断子节点的位置是否越界。
  5. 完成构造后,返回构造好的完整二叉树的根节点。
代码示例
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def build_complete_binary_tree(nums):
    n = len(nums)
    h = get_tree_height(n)

    tree = [None] * n

    for i, num in enumerate(nums):
        tree[i] = TreeNode(num)

    for i in range(n):
        if tree[i] is not None:
            left_child_idx = 2 * i + 1
            right_child_idx = 2 * i + 2

            if left_child_idx < n:
                tree[i].left = tree[left_child_idx]

            if right_child_idx < n:
                tree[i].right = tree[right_child_idx]

    return tree[0] if n > 0 else None


def get_tree_height(n):
    if n == 0:
        return 0

    height = 0
    while 2 ** height <= n:
        height += 1

    return height - 1
示例用法
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
root = build_complete_binary_tree(nums)

注意:示例程序中定义了一个 TreeNode 类用于表示二叉树的节点。你可以根据实际情况自定义节点类的实现。

以上是构造完整二叉树的示例代码,希望对你有帮助!