数据结构之二叉树

二叉树结构简单,规律性强,适合计算机处理。
任何树都可以转化为二叉树进行处理,不失一般性。

二叉树的定义与基本操作

二叉树的特点

每个结点的度不大于2。
每个结点的孩子结点次序不能颠倒。

五种基本形态

在这里插入图片描述

二叉树的基本操作

Initiate(bt):初始化二叉树
Create(bt):创建二叉树
Destroy(bt):销毁二叉树
Empty(bt):判断二叉树空
Root(bt):求二叉树根
Parent(bt):求双亲
LeftChild(bt):求左孩子
RightChild(bt):求右孩子
Traverse(bt):遍历
Clear(bt):清除

二叉树的性质

性质1:在二叉树的第i层上至多有2i-1个结点(i ≥ 1) 。
在这里插入图片描述
在这里插入图片描述
性质2:深度为k的二叉树至多有2k-1个结点(k ≥ 1)。
在这里插入图片描述
在这里插入图片描述
深度为k的二叉树至少有几个结点?
性质3:对于任何一棵二叉树,叶子结点总数比度为2的结点总数多一个,即n0=n2+1。
在这里插入图片描述
设: 结点总数为n
叶子结点数为n0
度为1结点总数为n1
度为2结点总数为n2
分支数目:B
则: n=n0+n1+n2
n=B+1
B=n1+2n2
故:n0=n2+1
满二叉树:每层结点都是满的,即每层结点都具有最大结点数。
在这里插入图片描述
满二叉树的存储方式:顺序存储,可表示为顺序表 (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)。
完全二叉树:除最后一层外,每层结点都是满的,最后一层的结点都集中在该层的最左边的若干位置上。
在这里插入图片描述
满二叉树一定是完全二叉树。
完全二叉树不一定是满二叉树。
性质4:具有n个结点的完全二叉树的深度为 ëlog2nû + 1
设: 结点总数为n完全二叉树深度为k
k-1层满二叉树的结点总数为:n1=2k-1-1 k层满二叉树的结点总数为:n2=2k-1
显然: n1<n≤n2
推出: n1+1 ≤n<n2+1
2k-1 ≤ n < 2k
k-1 ≤ log2n < k
故: k = ëlog2nû + 1
性质5:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一序号为i的结点有:
①如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是ëi/2û 。
②如果2i>n,则结点i无左孩子;如果2i≤n,则其左孩子是2i;
③如果2i+1>n,则结点i无右孩子;如果2i+1≤n,则其右孩子是2i+1。

二叉树的存储结构

顺序存储结构

结点按层序编号,并用一组连续的存储单元存储结点。
例1:完全二叉树的
顺序存储
在这里插入图片描述
在这里插入图片描述
优点:①不浪费空间 ②可计算左右孩子的位置
例2:单支二叉树的顺序存储
在这里插入图片描述
在这里插入图片描述
缺点:①浪费空间 ②插入、删除不方便

链式存储结构

① 二叉链表的结点组成
数据域、左孩子域、右孩子域。
在这里插入图片描述
② 二叉链表存储示例
在这里插入图片描述
在这里插入图片描述
n个结点,2n个指针域,n+1个指针域的值为空。
③ 二叉链表的类型的定义

typedef struct Node
	{
		DataType data;
		struct Node *Lchild;
		struct Node *Rchild;
	} BiTNode,*BiTree;

即 BiTNode:二叉树结点类型
BiTree:二叉树类型
④ 三叉链表
在这里插入图片描述
在这里插入图片描述
欢迎大家加我微信交流讨论(请备注csdn上添加)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程子的小段

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

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

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

打赏作者

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

抵扣说明:

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

余额充值