二叉树的相关概念以及存储结构

目录

一、二叉树的相关概念

二、满二叉树

三、完全二叉树

四、二叉树的顺序存储结构

五、二叉树的链式存储结构


一、二叉树的相关概念

1、二叉树的定义:二叉树是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。

2、二叉树的特点:

①每个结点最多有俩孩子(二叉树中不存在度大于2的结点)。

②子树有左右之分,其次序不能颠倒。

③二叉树可以是空集合,根可以有空的左子树或空的右子树。

3、二叉树的5种基本形态

虽然二叉树与树的概念不同(这个可以参考另一篇文章“树的初步认识”),但有关树的基本术语对二叉树都适用。

4、二叉树的基本操作(常用的)

①CreateBiTree(&T,definition)

初始条件; definition给出二叉树T的定义。

操作结果:按definition构造叉树T。

②PreOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:先序遍历T,对每个结点访问一次。

③InOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:中序遍历T,对每个结点访问一次。

④PostOrderTraverse(T)

初始条件:二叉树T存在。

操作结果:后序遍历T,对每个结点访问一次。

二、满二叉树

1、定义:一棵深度为 k且有2的k次方减1个结点的二叉树称为满二叉树。

2、特点: 每一层上的结点数都是最大结点数(即每层都满) ,叶子节点全部在最底层。

3、对满二叉树结点位置进行编号,编号规则:从根结点开始,自上而下,自左而右。

满二叉树通俗的讲就是每一个结点位置都有元素。

三、完全二叉树

1、深度为k的具有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号为1~ n的结点一一对应时,称之为完全二叉树。

 注:在满二叉树中,从最后一个结点开始,连续去掉任意个结点,即是一棵完全二叉树,

一定是连续的去掉!!!

2、满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

四、二叉树的顺序存储结构

1、实现:首先将其补充成完全二叉树,结点没有的位置用0补充,按满二叉树的结点层次编号,依次存放二叉树中的数据元素。如下图所示:

 

2、二叉树顺序存储表示

#define MAXTSIZE 100

Typedef TElemType SqBiTree[MAXSTIZE]         //TElemType SqBiTree表示树当中的元素类型是什么类型,SqBitree就是什么类型。如果树是int类型,那么SqBitree就是int型。

SqBiTree bt;       //用数组名SqBiTree定义一个变量bt该变量就代表一个数组。

3、二叉树的顺序存储缺点:最坏情况就是深度为k的且只有k个结点的单支树需要长度为2的k次方减1的一维数组。由于顺序存储其结点间关系蕴含在其存储位置中因此浪费空间,但是适于存满二叉树和完全二叉树。

五、二叉树的链式存储结构

1、二叉树结点的结构特点如下图所示:

 2、二叉树的链式存储表示

typedef struct BiNode{

TElemType data;

struct BiNode *lchild, *rchild; //二叉树的左右子树
}BiNode, *BiTree;

3、三叉链表——其实就是在二叉链表的基础上加了一个指向双亲的指针域,如下图所示:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜深人静码代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值