第六章树和二叉树.ppt
《第六章树和二叉树.ppt》由会员分享,可在线阅读,更多相关《第六章树和二叉树.ppt(84页珍藏版)》请在三一办公上搜索。
1、主讲:薛春艳,树和二叉树,主 要 内 容,1.树的定义与基本术语,2.二叉树,3.二叉树的遍历与线索化,4.树、森林和二叉树的关系,5.哈夫曼树及其应用,引 言,【树的原型】社会生活中:家族的族谱,政府自上至下摄制的机构体系,学校的管理体系,公司的管理体系等等。,【树的抽象】树是对具有层次关系的数据元素集合的抽象。,【树的应用】操作系统中:文件系统的组织;编译系统中:复合语句的句法;表达式表示中:表达式树;编码与解码中:Huffman树。,树的概念,【树】n(n0)个结点的有限集合T。当n=0时,称为空树;当n0时,该集合满足如下条件:,1、其中必有一个称为根(T)的特定结点,它没有直接前驱,
2、但有零个或多个直接后继。,2、其余n-1个结点可以划分成m(m0)个互不相交的有限集T1,T2,T3,Tm,其中Ti又是一棵树,称为根T的子树。每棵子树的根结点有且仅有一个直接前驱,可有零个或多个直接后继。,1.有且仅有一个结点没有前驱结点,该结点为树的根结点。,2.除了根结点外,每个结点有且仅有一个直接前驱结点。,3.包括根结点在内,每个结点可以有多个后继结点。,树的逻辑特点,子树,根,1.倒置树结构(树型表示法),2.广义表形式(嵌套括号表示法),(A(B(E(K,L),F),C(G),D(H(M),I,J),树的图解表示法,结 点:包含数据元素及若干指向其子树的分支信息。结点的度:一个结
3、点的子树个数称为此结点的度。叶子结点:度为0的结点,即无后继的结点,也为终端结点。分支结点:度不为0的结点,也称为非终端结点。结点的层次:从根结点开始定义,根结点的层次为1,根的直接后继的层次为2,依此类推。结点的层序编号:将树中的结点按从上层到下层、同层从左到右的次序排成一个线性序列,依次给它们编以连续的自然数。树 的 度:树中所有结点的度的最大值。树的高度(深度):树中所有结点的层次的最大值。,树的相关术语,结 点结点的度叶子结点分支结点结点的层次结点的层序编号树 的 度树的高度(深度),树的相关术语,有序树:在树T中,如果各子树Ti之间是有先后次序的,则称为有序树。,森 林:m(m0)棵
4、互不相交的树的集合。将一棵非空树的根结点删去,树就变成一个森林;反之,给森林增加一个统一的根结点,森林就变成一棵树。,同 构:对两棵树,通过对结点适当地重命名,就可以使两棵树完全相等(结点对应相等,对应结点的相关关系也相等),则称这两棵树同构。,树的相关术语,双亲结点:一个结点的直接前驱称为该结点的双亲结点。上图中A是B、C的双亲。,兄弟结点:同一双亲结点的孩子结点之间互称兄弟结点。上图中的结点H、I、J互为兄弟结点。,祖先结点:一个结点的祖先结点是指从根结点到该结点的路径上的所有结点。结点K的祖先结点是A、B、E。,子孙结点:一个结点的直接后继和间接后继称为该结点的子孙结点。如结点D的子孙是
5、H、I、J、M。,孩子结点:一个结点的直接后继称为该结点的孩子结点。如上图的B、C是A的孩子。,堂 兄 弟:父亲是兄弟关系或堂兄关系的结点称为堂兄弟结点。在图6.1中,结点E、G、H互为堂兄弟。,树的相关术语,【定义】我们把满足以下两个条件的树型结构叫做二叉树(Binary Tree):(1)每个结点的度都不大于2;(2)每个结点的孩子结点次序不能任意颠倒。,下面给出二叉树的五种基本形态:,二叉树的定义与基本操作,Root(T);Value(T,e);Parent(T,e);LeftChild(T,e);RightChild(T,e);LeftSibling(T,e);RightSibling
6、(T,e);BiTreeEmpty(T);BiTreeDepth(T);PreOrderTraverse(T,Visit();InOrderTraverse(T,Visit();PostOrderTraverse(T,Visit();LevelOrderTraverse(T,Visit();,二叉树的基本操作查找类:,CreateBiTree(,二叉树的基本操作插入类:,二叉树的基本操作删除类:,ClearBiTree(,性质1:在二叉树的第i层上至多有2i-1个结点(i1)。,1、当i=1时,二叉树只有一个根结点,此时 2i-1=20=1,结论成立。,【证明】,2、假设i=k时结论成立,即第
7、k层上结点总数最多为2k-1个。,3、现证明当i=k+1时,结论成立:,因为二叉树中每个结点的度最大为2,则第k+1层的结点总数最多为第k层上结点最大数的2倍,即 22k-1=2(k+1)-1 故结论成立。,二叉树的性质(一),性质2:深度为k的二叉树至多有2k-1个结点(k1)。,因为深度为k的二叉树,其结点总数的最大值是将二叉树每层上结点的最大值相加,所以深度为k的二叉树的结点总数至多为:,故结论成立。,二叉树的性质(二),【证明】,性质3:对任意一棵二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0=n2+1。,设二叉树中结点总数为n,n1为二叉树中度为1的结点总数。因为二
8、叉树中所有结点的度小于等于2,所以有n=n0+n1+n2设二叉树中分支数目为B,因为除根结点外,每个结点均对应一个进入它的分支,所以有:n=B+1。又因为二叉树中的分支都是由度为1和度为2的结点发出,所以分支数目为:B=n1+2n2整理上述两式可得到:n=B+1=n1+2n2+1将n=n0+n1+n2代入上式得出n0+n1+n2=n1+2n2+1,整理后得n0=n2+1,故结论成立。,二叉树的性质(三),【证明】,满二叉树:深度为k且有2k-1个结点的二叉树。在满二叉树中,每层结点都是满的,即每层结点都具有最大结点数。,满二叉树,两种特殊的二叉树,关系:满二叉树必为完全二叉树,而完全二叉树不一
9、定是满二叉树。,完全二叉树:深度为k,结点数为n的二叉树,如果其结点1n的位置序号分别与满二叉树的结点1n的位置序号一一对应,则为完全二叉树。,两种特殊的二叉树,性质4:具有n个结点的完全二叉树深度为 log2n+1。,设n个结点的完全二叉树的深度为k,根据性质2可知,k-1层满二叉树的结点总数为:2k-1-1 k 层满二叉树的结点总数为:2k-1 显然有:2k-1-1 n 2k-1 2k-1 n 2k 取对数有:k-1 log2n k因为k是整数,所以k-1=log2n,k=log2n+1结论成立。,二叉树的性质(四),【证明】,性质5:对于具有n个结点的完全二叉树,如果按照从上到下和从左到
10、右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点有:,(1)若i=1,则 i 无双亲结点 若i 1,则 i 的双亲结点为i/2(2)若2*i n,则 i 无左孩子 若2*in,则 i 结点的左孩子结点为2*i(3)若 2*i+1 n,则i 无右孩子 若 2*i+1n,则i的右孩子结点为2*i+1,二叉树的性质(五),1、完全二叉树的顺序存储结构,二叉树的顺序存储结构:,二叉树的顺序存储结构,根据完全二叉树的性质5,对于深度为h 的完全二叉树,将树中所有结点的数据信息按照编号的顺序依次存储到一维数组T1:2h-1中,由于编号与数组的下标一一对应,该数组就是该完全二叉树的顺
11、序存储结构.,2.一般二叉树的顺序存储结构,单支树,1、在二叉树中“添加”一些实际上二叉树中并不存在的“虚结点”,使其在形式上成为一棵“完全二叉树”;2、然后按照完全二叉树的顺序存储结构的构造方法将所有结点的数据信息依次存放于数组T1:2h-1中。,例如:,对于任意的二叉树来说,每个结点只有两个孩子,一个双亲结点。我们可以设计每个结点至少包括三个域:数据域、左孩子域和右孩子域:,二叉链表,二叉树T,二叉链表,二叉树的链式存储结构,typedef struct BiTNode TElemType data;struct BiTNode*lchild,*rchild;BiTNode,*BiTree
12、;,结论:若一个二叉树含有n个结点,则它的二叉链表中必含有2n个指针域,其中必有n+1个空的指针域。(分支数目B=n-1,即非空的指针域有n-1个,故空指针域有2n-(n-1)=n+1个。),二叉树的链式存储结构,什么是二叉树的遍历,按照一定的顺序(原则)对二叉树中每一个结点都访问一次(仅访问一次),得到一个由该二叉树的所有结点组成的序列,这一过程称为二叉树的遍历.,二叉树的遍历与线索化,“遍历”是任何类型均有的操作,对线性结构而言,只有一条搜索路径(因为每个结点均只有一个后继),故不需要另加讨论。而二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径遍历的问题。,二叉树
13、的遍历,用L、D、R分别表示遍历左子树、访问根结点、遍历右子树,那么对二叉树的遍历顺序有:,访问根,遍历左子树,遍历右子树(记做DLR)。遍历左子树,访问根,遍历右子树(记做LDR)。遍历左子树,遍历右子树,访问根(记做LRD)。,常用的二叉树的遍历方法:1.前序遍历 2.中序遍历 3.后序遍历 4.按层次遍历,二.前序遍历,前序序列:,A,B,D,E,J,C,F,I,原则:若被遍历的二叉树非空,则 1.访问根结点;2.以前序遍历原则遍历根结点的左子树;3.以前序遍历原则遍历根结点的右子树.,G,三.中序遍历,中序序列:,D,B,J,E,A,F,I,C,原则:若被遍历的二叉树非空,则 1.以中
14、序遍历原则遍历根结点的左子树;2.访问根结点;3.以中序遍历原则遍历根结点的右子树.,G,四.后序遍历,后序序列:,D,J,E,B,I,F,G,C,原则:若被遍历的二叉树非空,则 1.以后序遍历原则遍历根结点的左子树;2.以后序遍历原则遍历根结点的右子树.3.访问根结点;,A,前序遍历序列:A,B,D,K,J,G,C,F,I,E,H,中序遍历序列:D,B,G,J,K,A,F,I,E,C,H,后序遍历序列:D,G,J,K,B,E,I,F,H,C,A,按层次遍历序列:A,B,C,D,K,F,H,J,I,G,E,【例】对于如下图的二叉树,其先序、中序、后序遍历的序列为:先序遍历:A、B、D、F、G、
15、C、E、H。中序遍历:B、F、D、G、A、C、E、H。后序遍历:F、G、D、B、H、E、C、A。,void PreOrder(BiTree T)if(T!=NULL)Visit(T-data);PreOrder(T-LChild);PreOrder(T-RChild);,遍历算法先序,void PreOrder(BiTree T)if(T!=NULL;Visit(T-data);PreOrder(T-LChild);PreOrder(T-RChild);,void InOrder(BiTree T)if(T!=NULL)InOrder(T-LChild);Visit(T-data);InOrd
16、er(T-RChild);,遍历算法中序,void PostOrder(BiTree T)if(T!=NULL)PostOrder(T-LChild);PostOrder(T-RChild);Visit(T-data);,遍历算法后序,void PreOrder(BiTree T)if(T!=NULL)printf(T-data);PreOrder(T-LChild);PreOrder(T-RChild);,【输出二叉树中的结点】输出二叉树中的结点并无次序要求,因此可用三种遍历算法中的任何一种完成,只需将访问操作具体变为打印操作即可。下面给出采用前序遍历实现的算法。,遍历算法的应用(一),【输
17、出二叉树中的叶子结点】输出二叉树中的叶子结点与输出二叉树中的结点相比,它是一个有条件的输出问题,即在遍历过程中走到每一个结点时需进行测试,看是否满足叶子结点的条件。,void PreOrder(BiTree T)if(T!=NULL)if(T-LChild=NULL,遍历算法的应用(二),【统计叶子结点数目】统计二叉树中的叶子结点数目并无次序要求,因此可用三种遍历算法中的任何一种完成,只需将访问操作具体变为判断是否为叶子结点及统计操作即可。,void leaf(BiTree T)if(T!=NULL)leaf(T-LChild);leaf(T-RChild);if(T-LChild=NULL,
18、遍历算法的应用(三),【建立二叉链表方式存储的二叉树】采用类似先序遍历的递归算法,首先读入当前根结点的数据,如果是 则将当前树根置为空,否则申请一个新结点,存入当前根结点的数据,分别用当前根结点的左子域和右子域进行递归调用,创建左右子树。,void CreateBiTree(BiTree,遍历算法的应用(四),【二叉树T的高度】若T为空,则高度为0 若T非空,其高度应为其左右子树高度的最大值加1,int PostTreeDepth(BiTree T)int hl,hr,max;if(T!=NULL)hl=PostTreeDepth(T-LChild);hr=PostTreeDepth(T-RC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六 二叉
链接地址:https://www.31ppt.com/p-5670531.html