关于二叉树的顺序存储和链式存储

【出处】http://book.51cto.com/art/200907/134251.htm

3.2.2  二叉树的顺序存储结构和链式存储结构

(1)二叉树的顺序存储结构

按照顺序存储结构的定义,用一组地址连续的存储单元以此自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在如上定义的一维数组中下标为i-1的分量中。对于一般二叉树,则应将其每个结点与完全二叉树上的结点相对照,存储在一维数组的相应分量中,空缺表示不存在此结点。由此可见,这种顺序存储结构仅适用于完全二叉树,因为,在最坏的情况下,一个深度为k且只有k个节点的单支树(树中不存在度为2的结点)却需要长度为2k-1的一维数组。如下图所示:

 

 

二叉树的顺序存储表示:

 
 
  1. #define MAX_TREE_SIZE 100                              
  2. ∥二叉树的最大结点数  
  3. typedef ElemType SqBiTree[MAX_TREE_SIZE];  
  4. ∥0号单元存储根结点  
  5. SqBiTree bt; 

(2)二叉树的链式存储结构

二叉树的链式存储结构(简称二叉链表)是指用一个链表来存储一棵二叉树,二叉树中每一个结点用链表中的一个链结点来存储。在二叉树中,标准存储方式的结点结构如图所示:

 

其中,data表示值域,用于存储对应的数据元素,lchild和rchild分别表示左指针域和右指针域,分别用于存储左子女结点和右子女结点(即左、右子树的根结点)的存储位置(即指针)。

对应的C语言的结点类型定义如下:

 
 
  1. typedef struct node{  
  2. ElemType data;  
  3. struct node *lchild;  
  4. struct node *rchild;  
  5. }BTree; 

例如图3-12a所示的二叉树对应的二叉链表为图3-12b所示:

 

为了便于查找任一结点的双亲结点,可以在结点中再增加一个指针域parent,它称为三叉链表。例如上面的二叉树的三叉链表表示如图3-13所示。


  

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值