【数据结构】图解二叉树的存储结构

文章目录

    • 二叉树的顺序存储结构
    • 二叉链表

二叉树的顺序存储结构

二叉树的存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子之间的关系,左右兄弟之间的关系等。

首先看一下完全二叉树的顺序存储,一颗完全二叉树如图1-1所示。
【数据结构】图解二叉树的存储结构_第1张图片

图1-1

将这颗二叉树存入到数组中,相应的下标对应其同样的位置,如图1-2所示。
在这里插入图片描述
图1-2

这下看出完全二叉树的优越性了吧。由于它定义的严格,所以用顺序结构也可以表现出二叉树的结构来。
当然对于一般的二叉树,尽管层序编号不能反映逻辑关系,但是可以将其按完全二叉树编号,只不过,把存在的结点设置为“^”而已。如图1-3中,注意浅色结点表示不存在。
【数据结构】图解二叉树的存储结构_第2张图片
图1-3

考虑一种极端的情况,一颗深度为k的右斜树,他只有k个结点,却需要分配2 k-1个存储单元,这显然是对存储空间的浪费,例如图1-5所示,所以顺序存储结构一般只用于完全二叉树。
【数据结构】图解二叉树的存储结构_第3张图片
图1-5

二叉链表

既然顺序存储的适用性不强,我们就要考虑链式存储结构。**二叉树每个结点最多有两个孩子,所以为他设计一个数据域和两个指针域是比较自然的想法,我们称这样的链表叫做二叉链表,**结构如图1-6所示。
在这里插入图片描述

图1-6

其中data是数据域,lchild和rchild是是指针域,分别存放指向左孩子和右孩子的指针。

//二叉树的二叉链表结点结构定义
typedef struct BiNode
{
     
	TElemType data;    				//结点数据
	struct BiTNode *lchild,*rchild;  //左右孩子指针
}

结构示意图如图1-7所示。
【数据结构】图解二叉树的存储结构_第4张图片

图1-7

你可能感兴趣的:(大话数据结构,二叉树,链表,数据结构)