本文部分图片截取自B站懒猫老师。
视频链接为:https://www.bilibili.com/video/BV1Gz411b7Rq?spm_id_from=333.999.0.0.
二叉树的存储结构
顺序存储结构


看下图
1、完全二叉树的顺序存储

2、一般二叉树的顺序存储

看上图中的编号是否有些迷惑,注意细节,这个是按照完成二叉树编号来进行的。




如下图的右斜树所示。
如果我们也按照完成二叉树编号的方式进行呢?

这样势必会造成存储空间的浪费。

所以

二叉链表




假设有 n 个结点,而每个结点有两个指针,所以一共有 2n 个指针。
再来看 n 个结点一共有多少条边呢?
除了根结点以外,每个结点都连了一条边,所以 n 个结点有 n-1 条边。
而每一条边又都对应了一个指针,所以 n-1 条边就对应了 n-1 个指针。
总共有 2n 个指针,除去边所对应的指针,剩下的就是空指针。从而具有 n 结点的二叉链表中,有 n+1 个空指针。

可以看出,差不多有一半存储了空指针,所以浪费空间。在后面学习到的线索二叉树可以将这些空间给利用起来。

不能够通过孩子结点来找到它的双亲,那怎么办呢?我们可以采用三叉链表。
三叉链表


三叉链表的静态链表表示形式

也就是说右边的二叉树可以用左边的静态数组来表示,数组中的每个元素都是一个结构体,由

组成。上图中的 -1 代表的是空指针的概念。

缺点:不适合频繁进行插入和删除操作,只适合变化很小的二叉树。


750

被折叠的 条评论
为什么被折叠?



