第1章数据结构1.3.ppt
《第1章数据结构1.3.ppt》由会员分享,可在线阅读,更多相关《第1章数据结构1.3.ppt(91页珍藏版)》请在三一办公上搜索。
1、第1章 数据结构,1.1 数据结构的基本概念1.2 线性结构1.3 非线性结构1.4 查找与排序,1.3.1 树,1.3.2 图,1.3 非线性结构,逻辑结构,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.4 二叉树的遍历1.3.1.5 二叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,父结点:每一个结点只有一个前件,称为父结点。子结点:每一个结点可以有多个后件,都称为该结点的子结点。根结点:没有前件的结点只有一个,称为树的根结点。叶子结点:没有后件的结点称为叶子结点。,1.3.1
2、.1 树的基本概念,1.3.1.1 树的基本概念,父结点、根结点、子结点、叶子结点、结点的度、树的度、树的深度,1.3.1.1 树的基本概念,1.3.1.1 树的基本概念,1.3.1.1 树的基本概念,树链表中的结点结构,1.3.1.1 树的基本概念,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.4 二叉树的遍历1.3.1.5 二叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,1.什么是二叉树(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与
3、右子树。,1.3.1.2 二叉树及其基本性质,例 画出具有3个结点的树和二叉树的所有不同形态。解:(1)具有3个结点的树有2种不同的形态,,1.3.1.2 二叉树及其基本性质,例 画出具有3个结点的树和二叉树的所有不同形态。解:(2)具有3个结点的二叉树有5种不同的形态,,树和二叉树的区别主要是二叉树的结点的子树要区分左子树和右子树。即使在结点只有一个子树的情况下,也要明确指出该子树是左子树还是右子树。,1.3.1.2 二叉树及其基本性质,2.二叉树的基本性质性质1 在二叉树的第k层上,最多有2k1(k1)个 结点。性质2 深度为m的二叉树最多有2m1个结点。性质3 在任意一棵二叉树中,度为0
4、的结点(即叶子结点)总是比度为2的结点多一个。性质4 具有n个结点的二叉树,其深度至少为 log2n1 其中log2n表示取log2n的整数部分。,1.3.1.2 二叉树及其基本性质,3.满二叉树与完全二叉树满二叉树除了最后一层外,每一层上的所有结点都有两个子结点。,1.3.1.2 二叉树及其基本性质,(2)完全二叉树除了最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。,1.3.1.2 二叉树及其基本性质,1.3.1.2 二叉树及其基本性质,性质5 具有n个结点的完全二叉树的深度为log2n1。性质6 设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到
5、右)用自然数1,2,n给结点进行编号,则对于编号为k(k1,2,n)的结点有以下结论:(1)若k1,则该结点为根结点,它没有父结点;若k1,则该结点的父结点编号为INT(k/2)。,1.3.1.2 二叉树及其基本性质,(2)若2kn,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(显然也没有右子结点)。(3)若2k1n,则编号为k的结点的右子结点编号 为2k1;否则该结点无右子结点。,1.3.1.2 二叉树及其基本性质,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.4 二叉树的遍历1.3.1.5 二
6、叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,1.二叉链表#include stdlib.h struct btnode/*定义结点类型*/ET d;/*数据域*/struct btnode*lchild;/*左指针域*/struct btnode*rchild;/*右指针域*/;,1.3.1.3 二叉树的存储结构,1.3.1.3 二叉树的存储结构,1.3.1.3 二叉树的存储结构,2.二叉链表的生成(1)输入根结点值;(2)若左子树不空,则输入左子树,否则输入一个结束符;(3)若右子树不空,则输入右子树,否则输入一个结束符。,1.3.1.3 二叉树的存储结构,
7、例如,,F,A,D,B,E,GH,P,其中表示结束符,C,1.3.1.3 二叉树的存储结构,二叉链表的生成#include stdio.h”#include stdlib.h”struct btnode int d;struct btnode*lchild;struct btnode*rchild;struct btnode*creatbt(bt,k)struct btnode*bt;int k;int b;struct btnode*p,*t;printf(input b:);scanf(%d,&b);,1.3.1.3 二叉树的存储结构,if(b!0)/*输入的不是结束符*/p(struct
8、 btnode*)malloc(sizeof(struct btnode);pdb;plchildNULL;prchildNULL;if(k0)tp;/*若是第1个值,则置二叉链表头指针*/if(k1)btlchildp;/*链接到左子树*/if(k2)btrchildp;/*链接到右子树*/creatbt(p,1);/*输入左子结点值*/creatbt(p,2);/*输入右子结点值*/return(t)/*返回二叉链表头指针*/,1.3.1.3 二叉树的存储结构,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.
9、4 二叉树的遍历1.3.1.5 二叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,二叉树的遍历是要确定访问各结点的顺序,以便不重不漏地访问到二叉树的所有结点。实际就是将二叉树这种非线性结构按某种需要转化为线性序列,以便以后在对二叉树进行某种处理时直接使用。,1.3.1.4 二叉树的遍历,F,C,A,D,B,E,G,H,P,1.3.1.4 二叉树的遍历,1.前序遍历(DLR)若二叉树为空,则结束返回。否则:(1)访问根结点;(2)前序遍历左子树;(3)前序遍历右子树。,1.3.1.4 二叉树的遍历,#include stdio.hstruct btnode int
10、d;struct btnode*lchild;struct btnode*rchild;pretrav(bt)struc btnode*bt;if(bt!NULL)printf(%dn,btd);pretrav(btlchild);pretrav(btrchild);return;,1.3.1.4 二叉树的遍历,A,C,B,D,F,E,H,G,P,2.中序遍历(LDR)若二叉树为空,则结束返回。否则:(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。,1.3.1.4 二叉树的遍历,1.3.1.4 二叉树的遍历,#include stdio.hstruct btnode int d;
11、struct btnode*lchild;struct btnode*rchild;intrav(bt)struc btnode*bt;if(bt!NULL)intrav(btlchild);printf(%dn,btd);intrav(btrchild);return;,1.3.1.4 二叉树的遍历,A,C,B,D,F,E,H,G,P,3.后序遍历(LRD)若二叉树为空,则结束返回。否则:(1)后序遍历左子树;(2)后序遍历左子树;(3)访问根结点。,1.3.1.4 二叉树的遍历,1.3.1.4 二叉树的遍历,#include stdio.hstruct btnode int d;struc
12、t btnode*lchild;struct btnode*rchild;postrav(bt)struc btnode*bt;if(bt!NULL)postrav(btlchild);postrav(btrchild);printf(%dn,btd);return;,1.3.1.4 二叉树的遍历,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.4 二叉树的遍历1.3.1.5 二叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,二叉排序树及其构造(1)左子树上的所有结点值均小于根结点值
13、;(2)右子树上的所有结点值均不小于根结点值;(3)左、右子树也满足上述两个条件。,1.3.1.5 二叉排序树,1.3.1.5 二叉排序树,1.3.1.5 二叉排序树,依次读入给定序列中的每一个元素:(1)若当前的二叉排序树为空,则读入的元素为根结点;(2)若读入的元素值小于根结点值,则将元素插入到左子树中;(3)若读入的元素值不小于根结点值,则将元素插入到右子树中。无论是插入到左子树还是右子树,同样按照上述方法处理。,1.3.1.5 二叉排序树,1.3.1.5 二叉排序树,1.3.1.5 二叉排序树,1.3.1.5 二叉排序树,1.3.1.5 二叉排序树,二叉排序树的查找:从根结点开始与被查
14、值进行比较:(1)若被查值等于根结点值,查找成功。(2)若被查值小于根结点值,则查找左子树。(3)若被查值大于根结点值,则查找右子树。在左、右子树中查找时也采用上述方法。查找过程直到查找成功或所考虑的子树已空为止。,1.3.1.5 二叉排序树,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.4 二叉树的遍历1.3.1.5 二叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,1.3.1.6 树、森林与二叉树的转换,树与二叉树的对应关系树与二叉树均可用二叉链表作为存储结构,因此给定一棵树,
15、用二叉链表存储,可唯一对应一棵二叉树,反之亦然。,树变为二叉树的方法:()连接亲兄弟(不包括堂兄弟)()保留长子(断绝父亲与其他孩子关系)()顺时针旋转45度 特点:根无右子树,1.3.1.6 树、森林与二叉树的转换,如图:F=T1,T2,T3,1.3.1.6 树、森林与二叉树的转换,森林转换为二叉树的方法 将森林 F=T1,T2.Tm的各棵树分别转成二叉树BT1,BT2.BTm 将BTi+1作为BTi根结点的右子树(i=1,2,.,m-1),得到一棵BT。,1.3.1.6 树、森林与二叉树的转换,如图:F=T1,T2,T3,1.3.1.6 树、森林与二叉树的转换,二叉树转换森林的方法 将当前
16、根结点和其左子树作为森林的一棵树,并将其右子树作为森林的其他子树;重复上面直到某结点的右子树为空。,1.3.1.6 树、森林与二叉树的转换,1.3.1 树与二叉树,1.3.1.1 树的基本概念1.3.1.2 二叉树及其基本性质1.3.1.3 二叉树的存储结构1.3.1.4 二叉树的遍历1.3.1.5 二叉排序树1.3.1.6 树、森林与二叉树的转换1.3.1.7 二叉树应用举例,1.3.1 树,1.3.2 图,1.3 非线性结构,逻辑结构,1.3.2.1 图的基本概念,1.3.2.2 图的存储结构,1.3.2.3 图的遍历,1.3.2 图,1.图的概念:若数据元素集合D中的各元素间存在任意前后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 1.3

链接地址:https://www.31ppt.com/p-5910893.html