树零基础学数据结构学习教案.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《树零基础学数据结构学习教案.pptx》由会员分享,可在线阅读,更多相关《树零基础学数据结构学习教案.pptx(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1树零基础树零基础(jch)学数据结构学数据结构第一页,共84页。9.1 9.1 树树n n树是一种非线性的数据结构,树中的元素之间的关系是一对(y du)多的层次关系。本节主要介绍树的定义和树的抽象数据类型。第1页/共84页第二页,共84页。9.1.1 9.1.1 树的定义树的定义(dngy)(dngy)n n树是n(n0)个结点的有限序列。其中,n=0时,称为空树。当n0时,称为非空树,满足以下条件:n n(1)有且只有一个称为根的结点。n n(2)当n1时,其余(qy)n-1个结点可以划分为m个有限集合T1,T2,Tm,且这m个有限集合不相交,其中Ti(1im)又是一棵树,称为根的
2、子树。第2页/共84页第三页,共84页。9.1.2 9.1.2 树的逻辑树的逻辑(lu j)(lu j)表示表示n n树的逻辑表示方法(fngf)可以分为四种:树形表示法、文氏图表示法、广义表表示法和凹入表示法。第3页/共84页第四页,共84页。9.1.2 9.1.2 树的抽象数据类型树的抽象数据类型n n1数据(shj)对象集合n n2基本操作集合第4页/共84页第五页,共84页。9.2 9.2 二叉树二叉树n n在对一般树进行深入的学习之前,先学习一下一种比较简单的树二叉树。本节的主要学习内容包括(boku)二叉树的定义、基本性质及二叉树的抽象数据类型。第5页/共84页第六页,共84页。9
3、.2.1 9.2.1 二叉树的定义二叉树的定义(dngy)(dngy)n n二叉树是由n(n0)个结点构成(guchng)的另外一种树结构。二叉树中的每个结点最多只有两棵子树,并且二叉树中的每个结点都有左右次序之分,即次序不能颠倒。第6页/共84页第七页,共84页。9.2.1 9.2.1 二叉树的定义二叉树的定义(dngy)(dngy)第7页/共84页第八页,共84页。9.2.2 9.2.2 二叉树的性质二叉树的性质(xngzh)(xngzh)n n二叉树具有以下重要的性质。二叉树具有以下重要的性质。n n性质性质1 1 在二叉树中,第在二叉树中,第m(m1)m(m1)层上至多有层上至多有2m
4、-12m-1个结点(规定根结点为第一个结点(规定根结点为第一层)。层)。n n性质性质2 2 深度深度(shnd)(shnd)为为k(k1)k(k1)的二叉树至多有的二叉树至多有2k-12k-1个结点。个结点。n n性质性质3 3 对任何一棵二叉树对任何一棵二叉树T T,如果叶子结点总数为,如果叶子结点总数为n0n0,度为,度为2 2的结点总数为的结点总数为n2n2,则有,则有n0=n2+1n0=n2+1。n n性质性质4 4 如果完全二叉树有如果完全二叉树有n n个结点,则深度个结点,则深度(shnd)(shnd)为为 。符号。符号 表表示不大于示不大于x x的最大整数。的最大整数。n n性
5、质性质5 5 如果完全二叉树有如果完全二叉树有n n个结点,按照从上到下,从左到右的顺序对二叉个结点,按照从上到下,从左到右的顺序对二叉树中的每个结点从树中的每个结点从1 1到到n n进行编号,则对于任意结点进行编号,则对于任意结点i i有以下性质:有以下性质:第8页/共84页第九页,共84页。9.2.2 9.2.2 二叉树的性质二叉树的性质(xngzh)(xngzh)n n(1)如果(rgu)i=1,则序号i对应的结点就是根结点,该结点没有双亲结点。n n(2)如果(rgu)2in,则序号为i的结点没有左孩子结点。n n(3)如果(rgu)2i+1n,则序号为i的结点没有右孩子结点。第9页/
6、共84页第十页,共84页。9.2.3 9.2.3 二叉树的抽象数据类型二叉树的抽象数据类型n n1数据对象(duxing)集合n n2基本操作集合第10页/共84页第十一页,共84页。9.3 9.3 二叉树的存储表示二叉树的存储表示(biosh)(biosh)与实现与实现n n二叉树的存储(cn ch)结构有两种:顺序存储(cn ch)表示和链式存储(cn ch)表示。本节的主要学习内容包括二叉树的顺序存储(cn ch)表示、二叉树的链式存储(cn ch)表示及二叉树的基本操作实现。第11页/共84页第十二页,共84页。9.3.1 9.3.1 二叉树的顺序存储二叉树的顺序存储n n我们已经(y
7、 jing)知道,完全二叉树中每个结点的编号可以通过公式计算得到,因此,完全二叉树的存储可以按照从上到下、从左到右的顺序依次存储在一维数组中。第12页/共84页第十三页,共84页。9.3.1 9.3.1 二叉树的顺序存储二叉树的顺序存储第13页/共84页第十四页,共84页。9.3.2 9.3.2 二叉树的链式存储二叉树的链式存储(cn(cn ch)ch)n n在二叉树中,每个结点有一个双亲结点和两个孩子结点。从一棵二叉树的根结点开始,通过结点的左右孩子地址(dzh)就可以找到二叉树的每一个结点。因此二叉树的链式存储结构包括三个域:数据域、左孩子指针域和右孩子指针域。其中,数据域存放结点的值,左
8、孩子指针域指向左孩子结点,右孩子指针域指向右孩子的结点。第14页/共84页第十五页,共84页。9.3.2 9.3.2 二叉树的链式存储二叉树的链式存储(cn(cn ch)ch)第15页/共84页第十六页,共84页。9.3.2 9.3.2 二叉树的链式存储二叉树的链式存储(cn(cn ch)ch)n n二叉链表存储(cn ch)结构的类型定义描述如下:n ntypedef struct Node/*二叉链表存储(cn ch)结构类型定义*/n nn nDataType data;/*数据域*/n nstruct Node*lchild;/*指向左孩子结点*/n nstruct Node*rchi
9、ld;/*指向右孩子结点*/n n*BiTree,BitNode;第16页/共84页第十七页,共84页。9.3.3 9.3.3 二叉树的基本二叉树的基本(jbn)(jbn)运运算算n n采用二叉链表存储结构表示的二叉树的基本运算实现如下所示。以下(yxi)算法的实现保存在文件“LinkBiTree.h”中。n n(1)二叉树的初始化操作。n nvoid InitBitTree(BiTree*T)n n/*二叉树的初始化操作*/n nn n*T=NULL;n n第17页/共84页第十八页,共84页。9.3.3 9.3.3 二叉树的基本二叉树的基本(jbn)(jbn)运运算算n n(2 2)二叉树
10、的销毁)二叉树的销毁(xiohu(xiohu)操作。操作。n nvoid DestroyBitTree(BiTree*T)void DestroyBitTree(BiTree*T)n n/*/*销毁销毁(xiohu(xiohu)二叉树操作二叉树操作*/*/n n n nif(*T)if(*T)/*/*如果是如果是非空二叉树非空二叉树*/*/n n n n if(*T)-lchild)if(*T)-lchild)n n DestroyBitTree(&(*T)-lchild);DestroyBitTree(&(*T)-lchild);n n if(*T)-rchild)if(*T)-rchild
11、)n n DestroyBitTree(&(*T)-rchild);DestroyBitTree(&(*T)-rchild);n n free(*T);free(*T);n n *T=NULL;*T=NULL;n n n n 第18页/共84页第十九页,共84页。9.3.3 9.3.3 二叉树的基本二叉树的基本(jbn)(jbn)运运算算n n(3 3)创建二叉树操作。)创建二叉树操作。n nvoid CreateBitTree(BiTree*T)void CreateBitTree(BiTree*T)n n/*/*递归创建二叉树递归创建二叉树*/*/n n n n DataType ch;D
12、ataType ch;n n scanf(“%c”,&ch);scanf(“%c”,&ch);n n if(ch=#)if(ch=#)n n *T=NULL;*T=NULL;n n else elsen n n n *T=(BiTree)malloc(sizeof(BitNode);*T=(BiTree)malloc(sizeof(BitNode);/*/*生成根结生成根结点点(ji di(ji di n)*/n)*/n n if(!(*T)if(!(*T)n n exit(-1);exit(-1);n n (*T)-data=ch;(*T)-data=ch;n n CreateBitTree
13、(&(*T)-lchild);CreateBitTree(&(*T)-lchild);/*/*构造左子构造左子树树*/*/n n CreateBitTree(&(*T)-rchild);CreateBitTree(&(*T)-rchild);/*/*构造右子构造右子树树*/*/n n n n 第19页/共84页第二十页,共84页。9.3.3 9.3.3 二叉树的基本二叉树的基本(jbn)(jbn)运运算算n n(4)二叉树的左插入(ch r)操作。n nint InsertLeftChild(BiTree p,BiTree c)n n/*二叉树的左插入(ch r)操作*/n nn n if(p
14、)/*如果指针p不空*/n n n n c-rchild=p-lchild;/*p的原来的左子树成为c的右子树*/n n p-lchild=c;/*子树c作为p的左子树*/n n return 1;n n n n return 0;n n第20页/共84页第二十一页,共84页。9.3.3 9.3.3 二叉树的基本二叉树的基本(jbn)(jbn)运运算算n n(5)二叉树的右插入操作。n nint InsertRightChild(BiTree p,BiTree c)n n/*二叉树的右插入操作*/n nn n if(p)/*如果指针p不空*/n n n n c-rchild=p-rchild;
15、/*p的原来(yunli)的右子树作为c的右子树*/n n p-rchild=c;/*子树c作为p的右子树*/n n return 1;n n n n return 0;n n第21页/共84页第二十二页,共84页。9.3.3 9.3.3 二叉树的基本二叉树的基本(jbn)(jbn)运运算算n n(6)返回二叉树结点的指针操作。n n(7)返回二叉树的结点的左孩子元素(yun s)值操作。n n(8)返回二叉树的结点的右孩子元素(yun s)值操作。n n(9二叉树的左删除操作。n n(10)二叉树的右删除操作。第22页/共84页第二十三页,共84页。9.4 9.4 二叉树的遍历二叉树的遍历(
16、bin l)(bin l)n n在二叉树的应用中,常常需要对二叉树中每个结点进行访问,即二叉树的遍历。本节的主要学习内容(nirng)包括二叉树的先序遍历、二叉树的中序遍历及二叉树的后序遍历。第23页/共84页第二十四页,共84页。9.4.1 9.4.1 二叉树遍历二叉树遍历(bin l)(bin l)的的定义定义n n二叉树的遍历,即按照(nzho)某种规律对二叉树的每个结点进行访问,使得每个结点仅被访问一次的操作。这里的访问,可以是对结点的输出、统计结点的个数等。n n二叉树的遍历过程其实也是将二叉树的非线性序列转换成一个线性序列的过程。二叉树是一种非线性的结构,通过遍历二叉树,按照(nz
17、ho)某种规律对二叉树中的每个结点进行访问,且仅访问一次,得到一个顺序序列。第24页/共84页第二十五页,共84页。9.4.2 9.4.2 二叉树的先序遍历二叉树的先序遍历(bin(bin l)l)n n二叉树的先序遍历的递归定义如下:n n如果二叉树为空,则执行空操作。如果二叉树非空,则执行以下(yxi)操作:n n(1)访问根结点。n n(2)先序遍历左子树。n n(3)先序遍历右子树。第25页/共84页第二十六页,共84页。9.4.2 9.4.2 二叉树的先序遍历二叉树的先序遍历(bin(bin l)l)n n最后(zuhu)得到结点A的左子树先序序列:B、D、G、E、H、I、C、F、J
18、。第26页/共84页第二十七页,共84页。9.4.2 9.4.2 二叉树的先序遍历二叉树的先序遍历(bin(bin l)l)n nvoid PreOrderTraverse(BiTree T)n n/*先序遍历(bin l)二叉树的递归实现*/n nn n if(T)/*如果二叉树不为空*/n n n n printf(“%2c”,T-data);/*访问根结点*/n n PreOrderTraverse(T-lchild);/*先序遍历(bin l)左子树*/n n PreOrderTraverse(T-rchild);/*先序遍历(bin l)右子树*/n n n n第27页/共84页第二
19、十八页,共84页。9.4.2 9.4.2 二叉树的先序遍历二叉树的先序遍历(bin(bin l)l)n n先序遍历(bin l)的非递归实现第28页/共84页第二十九页,共84页。9.4.3 9.4.3 二叉树的中序遍历二叉树的中序遍历(bin(bin l)l)n n二叉树的中序遍历的递归定义如下:n n如果二叉树为空,则执行空操作。如果二叉树非空,则执行以下(yxi)操作:n n(1)中序遍历左子树。n n(2)访问根结点。n n(3)中序遍历右子树。第29页/共84页第三十页,共84页。9.4.3 9.4.3 二叉树的中序遍历二叉树的中序遍历(bin l)(bin l)n n二叉树的中序序
20、列二叉树的中序序列(xli)(xli)为:为:DD、GG、B B、HH、E E、I I、A A、F F、J J、C C。第30页/共84页第三十一页,共84页。9.4.3 9.4.3 二叉树的中序遍历二叉树的中序遍历(bin(bin l)l)n nvoid InOrderTraverse(BiTree T)n n/*中序遍历二叉树的递归实现*/n nn n if(T)/*如果(rgu)二叉树不为空*/n nn nInOrderTraverse(T-lchild);/*中序遍历左子树*/n n printf(“%2c”,T-data);/*访问根结点*/n n InOrderTraverse(T
21、-rchild);/*中序遍历右子树*/n n n n第31页/共84页第三十二页,共84页。9.4.3 9.4.3 二叉树的中序遍历二叉树的中序遍历(bin(bin l)l)n n二叉树的中序遍历(bin l)非递归算法实现 第32页/共84页第三十三页,共84页。9.4.4 9.4.4 二叉树的后序二叉树的后序(hu x)(hu x)遍历遍历n n二叉树的后序遍历(bin l)的递归定义如下:n n如果二叉树为空,则执行空操作。如果二叉树非空,则执行以下操作:n n(1)后序遍历(bin l)左子树。n n(2)后序遍历(bin l)右子树。n n(3)访问根结点。第33页/共84页第三十
22、四页,共84页。9.4.4 9.4.4 二叉树的后序二叉树的后序(hu(hu x)x)遍历遍历n n二叉树的后序二叉树的后序(hu x)(hu x)序列为:序列为:GG、DD、HH、I I、E E、B B、J J、F F、C C、A A。第34页/共84页第三十五页,共84页。9.4.4 9.4.4 二叉树的后序二叉树的后序(hu x)(hu x)遍历遍历n nvoid PostOrderTraverse(BiTree T)n n/*后序遍历二叉树的递归实现*/n nn n if(T)/*如果二叉树不为空*/n nn nPostOrderTraverse(T-lchild);/*后序遍历左子树
23、*/n n PostOrderTraverse(T-rchild);/*后序遍历右子树*/n nprintf(“%2c”,T-data);/*访问(fngwn)根结点*/n n n n第35页/共84页第三十六页,共84页。9.4.4 9.4.4 二叉树的后序二叉树的后序(hu x)(hu x)遍历遍历n n后序遍历(bin l)的非递归实现第36页/共84页第三十七页,共84页。9.5 9.5 二叉树的遍历二叉树的遍历(bin l)(bin l)的的应用举例应用举例n n二叉树的遍历应用(yngyng)非常广泛,本节主要通过几个例子来说明二叉树遍历的典型应用(yngyng)。本节的主要学习内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基础 数据结构 学习 教案
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内