You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于数组存储的完全二叉树打印实现问询

基于数组实现完全二叉树的打印方案

完全二叉树天生就适配数组存储,不用链表节点完全没问题!我来给你详细拆解实现思路,附可运行的代码示例。

核心原理:数组与二叉树节点的对应规则

首先得明确数组下标和树节点的映射关系,这是实现的基础,有两种常用的索引方式:

  • 下标从1开始(推荐,计算更直观):
    • 根节点在索引1的位置
    • 任意节点i的左孩子是2*i,右孩子是2*i + 1
    • 任意节点i的父节点是i // 2(整数除法)
  • 下标从0开始:
    • 根节点在索引0的位置
    • 任意节点i的左孩子是2*i + 1,右孩子是2*i + 2
    • 任意节点i的父节点是(i - 1) // 2

下面的示例我会用下标从1开始的方式,如果你手里的数组是0开始的,只需要在数组前面加一个占位元素(比如None)就能轻松转换。

实现思路:按层打印+格式对齐

要把数组元素打印成清晰的树状结构,核心是按层序遍历输出,同时处理好每层的缩进和节点间距:

  1. 计算树的高度:确定二叉树的层级数,这是计算缩进和间距的基础
  2. 逐层处理:遍历每一层,确定该层的起始、结束索引
  3. 美化格式:根据当前层的位置,计算前置缩进和节点间的空格,让上层节点对齐下层两个节点的中间位置

代码示例(Python)

def print_complete_binary_tree(arr):
    # 转换为下标从1开始的数组(适配原数组0开始的情况)
    if arr[0] is not None:
        arr = [None] + arr
    
    n = len(arr) - 1  # 实际元素个数
    if n == 0:
        print("空树")
        return
    
    # 计算树的高度(不用math库的写法)
    h = 0
    temp = n
    while temp > 0:
        temp = temp // 2
        h += 1
    
    # 控制每个节点的显示宽度(可根据元素类型调整)
    node_width = len(str(max(arr[1:]))) + 2  # 预留边距,避免元素长度不一打乱对齐

    for level in range(1, h + 1):
        # 当前层的起始和结束索引
        start_idx = 2 ** (level - 1)
        end_idx = min(2 ** level - 1, n)
        
        # 计算前置缩进:每往上一层,缩进是下层间距的一半
        indent = (2 ** (h - level) - 1) * node_width // 2
        print(' ' * indent, end='')
        
        # 计算当前层节点之间的间距
        if level < h:
            gap = (2 ** (h - level + 1) - 1) * node_width // 2
        else:
            gap = node_width  # 最底层节点直接用节点宽度作为间距
        
        # 打印当前层所有节点
        for i in range(start_idx, end_idx + 1):
            print(f"{arr[i]:^{node_width}}", end=' ' * (gap - node_width))
        print()  # 每层结束换行

# 测试用例
if __name__ == "__main__":
    # 7个元素的完全二叉树
    test_arr1 = [1, 2, 3, 4, 5, 6, 7]
    print("7元素完全二叉树:")
    print_complete_binary_tree(test_arr1)
    
    # 3个元素的完全二叉树
    print("\n--- 3元素完全二叉树 ---")
    test_arr2 = [10, 20, 30]
    print_complete_binary_tree(test_arr2)

代码说明

  • 索引转换:自动把0开始的数组转为1开始,简化节点关系计算
  • 树高计算:用循环替代对数库,兼容性更好
  • 格式控制:node_width保证不同长度的元素不会打乱对齐,缩进和间距的计算完全贴合完全二叉树的层级特性,让结构更直观
  • 边界处理:自动适配空树、单节点树、最后一层节点不满的情况

内容的提问来源于stack exchange,提问作者kala Mask

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:14:25