news 2026/3/31 13:18: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/3/20 23:12:33

YOLOv8损失函数分析:理解训练过程中各项指标含义

YOLOv8损失函数深度解析:从训练指标看模型行为 在目标检测的实际项目中,我们常常会遇到这样的情况:模型训练了几十个epoch,mAP提升缓慢,或者某一类物体总是漏检。打开训练日志,看到box_loss震荡不降、cls_l…

作者头像 李华
网站建设 2026/3/25 13:58:07

普华永道:AI、云计算和下一代网络重塑中东TMT未来

根据普华永道的一项研究,人工智能(AI)、云计算和下一代连接技术正在快速变革中东地区的电信、媒体和技术(TMT)格局,使该地区成为世界上发展最快的数字优先经济体之一。这项研究强调了AI、5G、云计算、游戏和量子技术融合如何重新定义基础设施投资、创新力…

作者头像 李华
网站建设 2026/3/23 9:03:26

2025年主流接口监控平台对比分析与最佳实践指南

核心观点摘要 1. 2025年主流接口监控平台在实时性、告警精准度与易用性上差异显著,商业方案普遍在开箱即用和智能分析上占优,开源或自建方案更适合技术能力强的团队。 2. 接口监控的关键技术路径分为全栈整合型与垂直工具链型,前者适合中大型…

作者头像 李华
网站建设 2026/3/26 22:50:58

机器学习:python电影推荐系统 机器学习 KNN算法(k近邻算法)Django框架 计算机 大数据毕业设计(建议收藏)

博主介绍:✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…

作者头像 李华
网站建设 2026/3/30 20:24:21

YOLOv8测试集性能报告生成步骤

YOLOv8测试集性能报告生成实战指南 在智能监控、工业质检和自动驾驶等现实场景中,一个目标检测模型能否真正“落地”,关键不在于训练时的损失曲线多么平滑,而在于它在真实测试集上的表现是否稳定可靠。然而,许多开发者在完成模型训…

作者头像 李华
网站建设 2026/3/27 10:51:06

YOLOv8体育赛事分析:运动员动作识别初探

YOLOv8体育赛事分析:运动员动作识别初探 在职业篮球比赛的第四节关键时刻,教练组需要在30秒暂停期间快速判断对手的防守轮转习惯。传统方式依赖助教翻看数小时录像片段,而如今,一套基于AI视觉的实时分析系统正将这一过程缩短至几分…

作者头像 李华