《树的类型定义》PPT课件.ppt
《《树的类型定义》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《树的类型定义》PPT课件.ppt(129页珍藏版)》请在三一办公上搜索。
1、6.1 树的类型定义,6.2 二叉树的类型定义,6.3 二叉树的存储结构,6.4 二叉树的遍历,6.5 线索二叉树,6.6 树和森林的表示方法,6.7 树和森林的遍历,6.8 哈夫曼树与哈夫曼编码,6.1 树的类型定义,数据对象 D:,D是具有相同特性的数据元素的集合。,若D为空集,则称为空树。否则:(1)在D中存在唯一的称为根的数据元素root;(2)当n1时,其余结点可分为m(m0)个互 不相交的有限集T1,T2,Tm,其中每一 棵子集本身又是一棵符合本定义的树,称为根root的子树。,数据关系 R:,A,B,C,D,E,F,G,H,I,J,M,K,L,A(B(E,F(K,L),C(G),
2、D(H,I,J(M),T1,T3,T2,树根,例如:,基本操作:,查 找 类,插 入 类,删 除 类,Root(T)/求树的根结点,查找类:,Value(T,cur_e)/求当前结点的元素值,Parent(T,cur_e)/求当前结点的双亲结点,LeftChild(T,cur_e)/求当前结点的最左孩子,RightSibling(T,cur_e)/求当前结点的右兄弟,TreeEmpty(T)/判定树是否为空树,TreeDepth(T)/求树的深度,TraverseTree(T,Visit()/遍历,InitTree(&T)/初始化置空树,插入类:,CreateTree(&T,definitio
3、n)/按定义构造树,Assign(T,cur_e,value)/给当前结点赋值,InsertChild(&T,&p,i,c)/将以c为根的树插入为结点p的第i棵子树,ClearTree(&T)/将树清空,删除类:,DestroyTree(&T)/销毁树的结构,DeleteChild(&T,&p,i)/删除结点p的第i棵子树,A,B,C,D,E,F,G,H,I,J,M,K,L,A(B(E,F(K,L),C(G),D(H,I,J(M),T1,T3,T2,树根,例如:,树形图表示的例子,对比树型结构和线性结构的结构特点,线性结构,树型结构,第一个数据元素(无前驱),根结点(无前驱),最后一个数据元素
4、(无后继),多个叶子结点(无后继),其它数据元素(一个前驱、一个后继),其它数据元素(一个前驱、多个后继),基 本 术 语,结点:,结点的度:,树的度:,叶子结点:,分支结点:,数据元素+若干指向子树的分支,分支的个数,树中所有结点的度的最大值,度为零的结点,度大于零的结点,D,H,I,J,M,(从根到结点的)路径:,孩子结点、双亲结点兄弟结点、堂兄弟祖先结点、子孙结点,结点的层次:,树的深度:,由从根到该结点所经分支和结点构成,假设根结点的层次为1,第l 层的结点的子树根结点的层次为l+1,树中叶子结点所在的最大层次,()有确定的根;()树根和子树根之间为有向关系。,有向树:,有序树:,子树
5、之间存在确定的次序关系。,无序树:,子树之间不存在确定的次序关系。,任何一棵非空树是一个二元组 Tree=(root,F)其中:root 被称为根结点 F 被称为子树森林,森林:,是m(m0)棵互不相交的树的集合,A,root,B,C,D,E,F,G,H,I,J,M,K,L,F,6.2 二叉树的类型定义,二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不交的二叉树组成。,A,B,C,D,E,F,G,H,K,根结点,左子树,右子树,二叉树的五种基本形态:,N,空树,只含根结点,N,N,N,L,R,R,右子树为空树,L,左子树为空树,左右子树均不为空树,二叉树的主要基本操作:,
6、查 找 类,插 入 类,删 除 类,Root(T);Value(T,e);Parent(T,e);LeftChild(T,e);RightChild(T,e);LeftSibling(T,e);RightSibling(T,e);BiTreeEmpty(T);BiTreeDepth(T);PreOrderTraverse(T,Visit();InOrderTraverse(T,Visit();PostOrderTraverse(T,Visit();LevelOrderTraverse(T,Visit();,InitBiTree(,ClearBiTree(,二叉树的重要特性,性质 1:在二叉树的
7、第 i 层上至多有2i-1 个结点。(i1),用归纳法证明:归纳基:归纳假设:归纳证明:,i=1 层时,只有一个根结点:2i-1=20=1;,假设对所有的 j,1 j i,命题成立;,二叉树上每个结点至多有两棵子树,则第 i 层的结点数=2i-2 2=2i-1。,性质 2:深度为 k 的二叉树上至多含 2k-1 个结点(k1)。,证明:,基于上一条性质,深度为 k 的二叉树上的结点数至多为 20+21+2k-1=2k-1。,性质 3:对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0=n2+1。,证明:,设 二叉树上结点总数 n=n0+n1+n2又 二叉
8、树上分支总数 b=n1+2n2 而 b=n-1=n0+n1+n2-1由此,n0=n2+1。,两类特殊的二叉树:,满二叉树:指的是深度为k且含有2k-1个结点的二叉树。,完全二叉树:树中所含的 n 个结点和满二叉树中编号为 1 至 n 的结点一一对应。,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,a,b,c,d,e,f,g,h,i,j,性质 4:具有 n 个结点的完全二叉树的深度为 log2n+1。,证明:,设完全二叉树的深度为 k 则根据第二条性质得 2k-1 n 2k 即 k-1 log2 n k 因为 k 只能是整数,因此,k=log2n+1。,性质 5:,若对
9、含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点:(1)若 i=1,则该结点是二叉树的根,无双亲,否则,编号为 i/2 的结点为其双亲结点;(2)若 2in,则该结点无左孩子,否则,编号为 2i 的结点为其左孩子结点;(3)若 2i+1n,则该结点无右孩子结点,否则,编号为2i+1 的结点为其右孩子结点。,6.3 二叉树的存储结构,二、二叉树的链式 存储表示,一、二叉树的顺序 存储表示,#define MAX_TREE_SIZE 100/二叉树的最大结点数typedef TElemType SqBiTreeMAX_ TREE_SI
10、ZE;/0号单元存储根结点SqBiTree bt;,一、二叉树的顺序存储表示,例如:,A,B,C,D,E,F,A B D C E F,0 1 2 3 4 5 6 7 8 9 10 11 12 13,1,4,0,13,2,6,二、二叉树的链式存储表示,1.二叉链表,2三叉链表,A,D,E,B,C,F,root,lchild data rchild,结点结构:,1.二叉链表,typedef struct BiTNode/结点结构 TElemType data;struct BiTNode*lchild,*rchild;/左右孩子指针 BiTNode,*BiTree;,lchild data rch
11、ild,结点结构:,C 语言的类型描述如下:,A,D,E,B,C,F,root,2三叉链表,parent lchild data rchild,结点结构:,typedef struct TriTNode/结点结构 TElemType data;struct TriTNode*lchild,*rchild;/左右孩子指针 struct TriTNode*parent;/双亲指针 TriTNode,*TriTree;,parent lchild data rchild,结点结构:,C 语言的类型描述如下:,6.4二叉树的遍历,一、问题的提出,三、先左后右的遍历算法,四、中序遍历算法的非递归描述,五
12、、遍历算法的应用举例,二、按层次遍历二叉树,顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。,一、问题的提出,“访问”的含义可以很广,如:输出结点的信息等。,“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。而二叉树是非线性结构,,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径遍历的问题。,对“二叉树”而言,可以有三条搜索路径:,1先上后下的按层次遍历;2先左(子树)后右(子树)的遍历;3先右(子树)后左(子树)的遍历。,二、按层次遍历二叉树 实现方法为从上层到下层,每层中从左侧到右侧依次访
13、问每个结点。下面我们将给出一棵二叉树及其按层次顺序访问其中每个结点的遍历序列。,按层次遍历该二叉树的序列为:A B E C F D G H K,A,B,C,D,E,F,G,H,K,三、先左后右的遍历算法,先(根)序的遍历算法,中(根)序的遍历算法,后(根)序的遍历算法,若二叉树为空树,则空操作;否则,(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。,先(根)序的遍历算法:,四、算法的递归描述,void Preorder(BiTree T,void(*visit)(TElemType/遍历右子树,A,B,C,D,E,F,G,D L R,T,D L R,D L R,A,B,E,D L
14、 R,D L R,DLR,DLR,C,F,D,G,中序遍历结果:,A,B,C,D,E,F,G,T,若二叉树为空树,则空操作;否则,(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。,中(根)序的遍历算法:,void Inorder(BiTree T,void(*visit)(TElemType/遍历右子树,A,B,C,D,E,F,G,L D R,T,L D R,L D R,A,B,E,L D R,L D R,LDR,LDR,C,F,D,G,中序遍历结果:,B,D,C,A,G,F,E,T,若二叉树为空树,则空操作;否则,(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。,
15、后(根)序的遍历算法:,void Postorder(BiTree T,void(*visit)(TElemType/访问结点,A,B,C,D,E,F,G,H,K,例如:,先序序列:A B C D E F G H K,中序序列:B D C A H G K F E,后序序列:D C B H K G F E A,五、中序遍历算法的非递归描述中序遍历示意图,算法一:,Status InorderTraverse(Bitree T,Status(*Visit)(TElemType e)InitStack(S);Push(S,T);while(!StackEmpty(S)while(GetTop(S,p
16、),Status InorderTraverse(Bitree T,Status(*Visit)(TElemType e)InitStack(S);p=T;while(p|!StackEmpty(S)if(p)Push(S,p);p=p-lchild;else Pop(S,p);if(!Visit(p-data)return ERROR;p=p-rchild;return OK;,算法二:,六、遍历算法的应用举例,2、统计二叉树中叶子结点的个数(先序遍历),3、求二叉树的深度(后序遍历),1、输入结点值,构造二叉树(先序遍历),1、输入结点值,构造二叉树,算法基本思想:,先序(或中序或后序)遍
17、历二叉树,读入一个字符,若读入字符为空,则二叉树为空,若读入字符非空,则生成一个结点。将算法中“访问结点”的操作改为:生成一个结点,输入结点的值。,Status CreateBiTree(BiTree/CreateBiTree,2、统计二叉树中叶子结点的个数,算法基本思想:,先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。由此,需在遍历算法中增添一个“计数”的参数,并将算法中“访问结点”的操作改为:若是叶子,则计数器增1。,void CountLeaf(BiTree T,int/if/CountLeaf,3、求二叉树的深度(后序遍历),算法基本思想:,从二叉树深度的定义可知,
18、二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加1。,首先分析二叉树的深度和它的左、右子树深度之间的关系。,int Depth(BiTree T)/返回二叉树的深度 if(!T)depthval=0;else depthLeft=Depth(T-lchild);depthRight=Depth(T-rchild);depthval=1+(depthLeft depthRight?depthLeft:depthRight);return depthval;,6.5线索二叉树,何谓线索二叉树?线索链表的
19、遍历算法 如何建立线索链表?,一、何谓线索二叉树?,遍历二叉树的结果是,求得结点的一个线性序列。,A,B,C,D,E,F,G,H,K,例如:,先序序列:A B C D E F G H K,中序序列:B D C A H G K F E,后序序列:D C B H K G F E A,指向该线性序列中的“前驱”和“后继”的指针,称作“线索”,与其相应的二叉树,称作“线索二叉树”,包含“线索”的存储结构,称作“线索链表”,A B C D E F G H K,D,C,B,E,对线索链表中结点的约定:,在二叉链表的结点中增加两个标志域,并作如下规定:,若该结点的左子树不空,则Lchild域的指针指向其左子
20、树,且左标志域的值为“指针 Link”或0;否则,Lchild域的指针指向其“前驱”,且左标志的值为“线索 Thread”或1。,若该结点的右子树不空,则rchild域的指针指向其右子树,且右标志域的值为“指针 Link”或0;否则,rchild域的指针指向其“后继”,且右标志的值为“线索 Thread”或1。,如此定义的二叉树的存储结构称作“线索链表”。,线索链表的结点结构,ltag和rtag是增加的两个标志域,用来区分结点的左、右指针域是指向其左、右孩子的指针,还是指向其前驱或后继的线索。,typedef struct BiThrNod TElemType data;struct BiTh
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 树的类型定义 类型 定义 PPT 课件
链接地址:https://www.31ppt.com/p-5532602.html