树的学习——(二)二叉树的存储结构及访问

1. 二叉树的顺序存储:
用一组连续的存储单元依次自上而下自左而右存储完全二叉树的结点元素。

完全二叉树的逻辑关系的表示:利用了完全二叉树的双亲结点和孩结点的编号规则。即双亲结点编号为i,其左孩子结点为(2i),右孩子结点为(2i+1),反之亦可。因此为了保证完全二叉树的结点编号与内存数组中的结点编号一致的话,此时应该使数组内存前空一格。而这空的一格通常可以存储二叉树的结点个数。
如下:
在这里插入图片描述
对于非完全二叉树,是不可以采用之前方法对逻辑关系进行表示。其逻辑关系表示为:
添加一下不存在的空结点,在数组中用0表示。
在这里插入图片描述
顺序存储在最坏情况下会非常浪费存储空间,比较适合完全二叉树。如下:
在这里插入图片描述
2. 二叉树的链式存储
用链表来存放一棵二叉树,二叉树中每个结点用链表的一个链结点来存储。其内存中物理结构表示如下:
因为二叉树最多两个孩子结点,因此在每个链结点处需要有三个元素,两个指针指向下两个孩结点。
在这里插入图片描述
二叉树的链式存储定义:

typedef struct BiTNode
{
   
int data;
BiTNode *lchild,*rchild;
}*BiTree;

其图像表示如图:
在这里插入图片描述
从上图可以知道:含有n个结点的二叉链表中,有n+1个空链域。过程如下:n个结点有2n个链域,其中总共有n-1条链(由结点数目比度的数目多1得到),因此可以得到有(2n-(n-1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值