news 2026/7/14 21:56:51

顺序存储结构和链式存储结构是二叉树的两种主要存储方式,各有优缺点和适用场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
顺序存储结构和链式存储结构是二叉树的两种主要存储方式,各有优缺点和适用场景

顺序存储结构和链式存储结构是二叉树的两种主要存储方式,各有优缺点和适用场景。

  1. 顺序存储结构

    • 适用场景:特别适合完全二叉树,如堆(Heap)等数据结构。
    • 存储规则
      • 根节点存放在数组下标为 1 的位置(通常舍弃下标 0,便于计算);
      • 对于下标为i的节点:
        • 左孩子下标为2i
        • 右孩子下标为2i + 1
        • 父节点下标为i // 2(i > 1)。
    • 优点
      • 存储紧凑,无需额外指针;
      • 访问任意节点的孩子或父节点非常高效(通过下标直接计算)。
    • 缺点
      • 对于非完全二叉树,必须用“虚结点”填充空缺位置,导致严重空间浪费
      • 最坏情况:深度为k的单支树(如所有节点只有右孩子),需要2^k - 1的存储空间,但实际仅使用k个节点。
  2. 链式存储结构

    • 二叉链表
      • 每个节点包含三部分:data(数据域)、left(左孩子指针)、right(右孩子指针)。
      • 结构灵活,适用于任意形状的二叉树。
    • 三叉链表
      • 在二叉链表基础上增加parent指针,用于指向双亲节点。
      • 更方便实现某些操作(如回溯父节点)。
    • 优点
      • 空间利用率高,不需填充虚结点;
      • 易于插入、删除节点,动态性强。
    • 缺点
      • 二叉链表中查找父节点需从根遍历(除非使用三叉链表);
      • 指针占用额外空间,有一定存储开销。

存储方式优点缺点
顺序存储访问孩子/父节点快,实现简单非完全二叉树时空间浪费严重
链式存储空间利用率高,适应任意二叉树查找父节点慢(二叉链表),有指针开销

总结选择建议

  • 若处理的是完全二叉树(如堆、哈夫曼树数组表示),优先使用顺序存储
  • 若处理的是普通或形态不规则的二叉树,应选用链式存储以节省空间并提高灵活性。
# 示例:二叉链表的Python类定义classTreeNode:def__init__(self,val=0):self.data=val self.left=Noneself.right=None# 三叉链表扩展(含父节点)classTriTreeNode:def__init__(self,val=0):self.data=val self.left=Noneself.right=Noneself.parent=None

顺序存储通常将根节点放在数组下标 1 而不是 0,主要是为了简化父子节点之间的下标计算公式,使逻辑更清晰、计算更高效。

原因详解:

当根节点存放在下标 1 时,对于任意下标为i的节点:

  • 左孩子下标 =2 * i
  • 右孩子下标 =2 * i + 1
  • 父节点下标 =i // 2(i > 1)

这些公式简洁且具有数学上的对称性,便于程序实现和手动推导。


示例说明:

假设数组从下标 1 开始存储,有如下完全二叉树:

A / \ B C / \ / \ D E F G

存储数组(索引 1~7):

index: 1 2 3 4 5 6 7 [A, B, C, D, E, F, G]

验证关系:

  • A (i=1):左孩子 = 2×1 = 2 → B;右孩子 = 2×1+1 = 3 → C
  • B (i=2):左孩子 = 4 → D;右孩子 = 5 → E
  • C (i=3):左孩子 = 6 → F;右孩子 = 7 → G
  • E (i=5):父节点 = 5//2 = 2 → B ✅

所有关系都自然成立,无需额外调整。


如果从下标 0 开始会怎样?

若根节点放在下标 0,则需要重新定义规则:

  • 节点i的:
    • 左孩子 =2*i + 1
    • 右孩子 =2*i + 2
    • 父节点 =(i - 1) // 2

虽然也能工作(现代堆实现中常见),但失去了整除与倍数的直观美感,且在教学或理论分析中不够简洁。

例如:

  • 根在 0
  • 左孩子:2×0+1 = 1
  • 右孩子:2×0+2 = 2
  • 子节点 3 的父节点 = (3−1)//2 = 1

这在编程中是可行的(如 Python 的heapq模块就用下标 0),但在教材或算法推导中,从 1 开始能更直观体现完全二叉树与数组下标的数学对应关系


总结

特点下标从 1 开始下标从 0 开始
公式简洁性⭐ 高(2i, 2i+1, i//2)较低(2i+1, 2i+2, (i-1)//2)
教学友好性一般
实际编程使用少(需浪费 arr[0])多(节省空间)
数学规律性易理解、易记忆需额外推导

因此,在理论教学和图示表示中倾向于从下标 1 开始,以突出结构规律;而在实际编程实现中(如堆排序),常从 0 开始以充分利用数组空间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 20:18:18

天津大学:2025年人工智能赋能大学治理|附59页PDF文件下载

本文提供完整版报告下载,请查看文后提示。以下为报告节选:......文│天津大学本报告共计:59页。如欲获取完整版PDF文件。最后我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早…

作者头像 李华
网站建设 2026/7/14 21:21:33

AI认知地图:从AIGC到多模态模型,小白也能掌握的20个前沿概念

文章介绍了AI领域的8个前沿认知,包括AIGC、多模态模型、AI Agent、具身智能、RAG技术、提示词工程、AI搜索工具使用以及AI学习方法。强调普通人应先从使用工具开始,在实践中掌握提示词技巧,无需一开始就深入研究底层原理,从而更好…

作者头像 李华
网站建设 2026/7/14 20:20:12

为什么你的空间模型总是不显著?R语言LISA聚类分析告诉你真相

第一章:为什么你的空间模型总是不显著?在构建空间计量模型时,许多研究者常遇到模型估计结果不显著的问题。这不仅影响结论的可信度,也可能误导后续决策。造成这一现象的原因多种多样,从数据质量到模型设定都可能埋藏隐…

作者头像 李华
网站建设 2026/7/14 21:21:59

YOLOv8 Warmup预热训练机制作用说明

YOLOv8 Warmup预热训练机制作用说明 在深度学习模型的训练过程中,你是否曾遇到这样的情况:刚启动训练时损失值突然飙升,甚至直接“炸掉”?尤其是在使用YOLOv8这类高性能目标检测模型时,这种现象尤为常见。问题往往不在…

作者头像 李华
网站建设 2026/7/14 21:21:44

降 AI 率效率最高的方法,我用下来确实省心

一、为什么手动降重总翻车?学术党必知的3大痛点“明明查重率达标了,导师却说论文有AI味要求重写!”——这是不是你的真实写照?很多同学误以为同义词替换调整句式就能蒙混过关,结果陷入三大困局:❌ 痛点1&am…

作者头像 李华