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

二叉树的顺序存储结构

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

首先看一下完全二叉树的顺序存储,一颗完全二叉树如图1-1所示。
在这里插入图片描述

图1-1

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

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

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

二叉链表

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

图1-6

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

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

结构示意图如图1-7所示。
在这里插入图片描述

图1-7

  • 13
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值