二叉树

15.1 树和二叉树
15.1.1 树的基本概念
树是一个或多个结点所构成的有限集合。每一棵树必有一个特定的节点,称为根节点。根节点之下可有零个以上的子节点,而个子节点也可以为子树,拥有自己的子节点。
数的定义还可以形式化的描述为二元组的形式:
T=(D,R)
D为树T中的节点的集合,R为树中结点之间的集合。
树具有下面两个特点:
1.树的根结点没有前驱结点,除根结点之外的所有结点有且只能有一个前驱节点。
2.书中所有的节点可以有零个或多个子节点。
15.1.2 二叉树的概念
1.二叉树的定义
二叉树是一个特殊的树,二叉树中的结点至多只能有两个子节点。
二叉树的定义如下:
(1)由有限个结点所构成的集合,次集合可以为空的;
(2)二叉树的根节点下可分所构成的集合,此集合可以为空的;
2.二叉树的相关概念
(1)满二叉树:在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称作满二叉树。
(2)完全二叉树:叶子结点只能出现在最下层和次下层,姐,最下层的叶子节点集中在树的左部。
15.2 二叉树的储存结构
15.2.1 数据储存结构
二叉树的顺序储存结构就是用一组连续的储存单元存放二叉树中的结点。一般赵二叉树从上至下、从左到右的顺序储存。
15.2.2 链式存储结构
二叉树的链式储存结构是用链表来表示一颗二叉树,用链表表示元素的逻辑关系,通常采用二叉链表储存。
15.3 二叉树的基本操作
15.3.1 二叉树遍历
二叉树由根结点,左子树和右子树三部分组成。因此只要遍历这三部分,就可以遍历整个二叉树。若以D,L,R分别表示访问根结点,左子树,右子树,如果限定先后左右,则22树的遍历方式有三种。即DLR(先序遍历),LDR(中序遍历),LRD(后序遍历)。
15.3.2 二叉树的创建
1.已知二叉顺序储存结构创建链式储存结构的二叉树
由于顺序储存结构的固有缺陷,二叉树通常采用链式储存结构。事实上,可以采用二叉树的顺序储存结构,在内存中创建它的链式储存结构。
2.利用扩大二叉树的先序列创建二叉树。
3.没有先序列及中序列创建二叉树。
15.3.3 二叉树的销毁
而叉树的每个节点都是调用malloc()生成的,销毁二叉树时,需要对每个节点都调用free()释放。二叉树的销毁与二叉树的后序遍历的步骤一样,先销毁根节点的左子树,在销毁根结点的右子树,最后释放根节点本身。
15.3.4 二叉树的查找
1.二叉树遍历查找方法
2.二叉树二分查找方法。
15.3.5 二叉树结点的删除
对于一棵二叉树,与删除某个节点,需先将该节点从树中移除,在调用free()释放该结点所占内存,移除节点的处理方式可以分为四种。
1.结点无左子树,且无右子树
(1)为根结点。
(2)非跟结点
2.结点有左子树,无右子树
(1) 为根结点
(2)非根结点
3.结点无左子树,有右子树
4.结点有左子树,有右子树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值