数据结构之树&&二叉树(四)

二叉树链式存储结构

前言

二叉树有两种主流存储方式:顺序存储(数组,适合完全二叉树 / 堆) 、链式存储(链表,普通二叉树首选)。 链式存储是我们写二叉树遍历、BST、AVL、红黑树的基础,不需要占用连续内存,适合形态不规则的二叉树。

一、链式存储相对顺序存储的优势

数组顺序存储二叉树原理:利用完全二叉树下标映射关系 ,根 i,左孩子2i+1,右孩子2i+2。

  1. 适配任意形态二叉树,不会浪费大量空间 数组存储只适合完全二叉树。如果是单边斜树(比如只有左孩子),数组要开辟巨大容量,大量位置是空、白白占内存。 链式存储节点按需 malloc,树有多少节点就开辟多少内存,歪斜树、稀疏树都不浪费空间。
  2. 插入、删除节点代价小 数组存储如果在中间插入节点,需要移动大量元素; 链式只需要修改指针指向,不需要挪动其他节点。
  3. 节点动态分配,不受预先容量限制 数组需要提前确定最大长度,一旦扩容开销大;链式在堆上动态创建节点,树可以随时长大。

链式短板回顾:不能下标随机访问;每个节点要额外存 2 个指针,有少量额外内存开销。

二、二叉树前、中、后序遍历(递归版,链式结构)

遍历定义:根节点访问顺序区分三种遍历

  • 前序遍历:根 → 左子树 → 右子树
  • 中序遍历:左子树 → 根 → 右子树
  • 后序遍历:左子树 → 右子树 → 根

代码实现前,中,后序遍历

链式存储核心思想

每一个节点是独立的一小块内存。 一个节点包含三部分:

  1. 数据域:存放当前节点的值
  2. 左孩子指针:指向左子树节点,没有左孩子则置为NULL
  3. 右孩子指针:指向右子树节点,没有右孩子则置为NULL

因为通过指针把一个个节点串联起来,所以叫链式存储。

前序遍历

递归调用

中序遍历和后续遍历于前序不同的时候输出数据的时机是不一样的

相关推荐
bro_Java6663 分钟前
链表进阶2:双向链表的构建
java·数据结构·链表
需要8261 小时前
分布式 ID 生成:雪花算法、号段模式与时钟回拨
分布式·算法
垆边人似月.1 小时前
华为机考题:字符串分隔
算法·华为
CQU_JIAKE1 小时前
9.4【A】
算法
梦帮科技1 小时前
量子张量网络破局大模型:从矩阵乘积态 (MPS) 到张量列 (TT-SVD) 低秩收缩全推导
网络·数据结构·数据库·线性代数·矩阵·架构·模拟退火算法
CQU_JIAKE1 小时前
9.13[A]
算法
懿路向前1 小时前
【唤醒实战笔记】2026-09-29 | 智能体提示词迭代史(v1 → v8)
linux·笔记·算法
@陈小鱼2 小时前
基于CNN-Transformer的无袖带血压估计
人工智能·深度学习·神经网络·算法·cnn·transformer·血压
黄金龙PLUS2 小时前
5个1280比特大状态置换算法的设计与分析
算法·网络安全·密码学·哈希算法·同态加密
LOVE️YOU2 小时前
Python 数据结构的本质:位置、对象引用、Hash 与可变性
数据结构·python·哈希算法