《树和二叉树 》PPT课件.ppt
《《树和二叉树 》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《树和二叉树 》PPT课件.ppt(113页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、曾祖父曾祖父 爷爷爷爷 二爷二爷 三爷三爷 父亲父亲 二叔二叔独生子独生子族谱族谱树是以分支关系定义的层次结构。树是以分支关系定义的层次结构。第十章第十章树树树型结构是一类重要的树型结构是一类重要的非线性非线性结构。结构。学习重点学习重点:树的基本概念树的基本概念 二叉树的基本概念、相关操作二叉树的基本概念、相关操作 树和森林与二叉树之间的相互转换树和森林与二叉树之间的相互转换 二叉树的应用二叉树的应用第十章第十章树树树的定义和基本术语树的定义和基本术语树树(Tree):是具有层次结构的是具有层次结构的 n(n0)个结点的有限集。个结点的有限集。ABCDEFGHIJKLM一般树一般树第第十十章
2、章树树只有根结点的树只有根结点的树A树树(Tree):是是 n(n0)个结点的有限集。个结点的有限集。n0,有且仅有一个称为,有且仅有一个称为根根的结点。的结点。n1,除根结点外,其余结点可分为,除根结点外,其余结点可分为 m(m0)个互个互不相交的有限子集不相交的有限子集 T1,T2,Tm,其中每个子集都,其中每个子集都称为称为根结点的子树根结点的子树。A.T1T2Tmn1第十章第十章树和二叉树树和二叉树基本术语基本术语结点结点(node)表示树中的元素,包括数据项及若干表示树中的元素,包括数据项及若干指向其子树的分支指向其子树的分支结点的度结点的度(degree)结点拥有的子树数结点拥有的
3、子树数叶子叶子(leaf)度为度为0的结点的结点孩子孩子(child)结点子树的根称为该结点的孩子结点子树的根称为该结点的孩子双亲双亲(parents)孩子结点的上层结点叫该结点的孩子结点的上层结点叫该结点的兄弟兄弟(sibling)同一双亲的孩子同一双亲的孩子树的度树的度一棵树中最大的结点度数一棵树中最大的结点度数深度深度(depth)树中结点的最大层次数树中结点的最大层次数第十章第十章树和二叉树树和二叉树ABCDEFGHIJKLM结点结点A的度:的度:3结点结点B的度:的度:2结点结点M的度:的度:0叶子:叶子:K,L,F,G,M,I,J结点结点A的孩子:的孩子:B,C,D结点结点B的孩子
4、:的孩子:E,F结点结点I的双亲:的双亲:D结点结点L的双亲:的双亲:E结点结点B,C,D为兄弟为兄弟结点结点K,L为兄弟为兄弟树的度:树的度:3结点结点A的层次:的层次:1结点结点M的层次:的层次:4树的深度:树的深度:4结点结点F,G为堂兄弟为堂兄弟结点结点A是结点是结点F,G的祖先的祖先第十章第十章树和二叉树树和二叉树树的其它表示方法树的其它表示方法 a.嵌套集合嵌套集合大集合表示树,小集合表示子树,相互嵌套。大集合表示树,小集合表示子树,相互嵌套。ABDCEFK LGHJIM第六章第六章树树b.层次表示法层次表示法类似书的编目类似书的编目ABCDEFGHIJKLM第六章第六章树树二叉树
5、二叉树二叉树的定义二叉树的定义二叉树二叉树是是 n(n0)个结点的有限集,它或者是个结点的有限集,它或者是空集空集,或者是由,或者是由一个一个根根和称为和称为左、右子树左、右子树的两个互不相交的的两个互不相交的二叉树二叉树组成组成。二叉树是一个二叉树是一个递归定义递归定义。树的子树次序不作规定,二叉树的两个子树有树的子树次序不作规定,二叉树的两个子树有左、右之分左、右之分。树中结点的度没有限制,二叉树中结点的度只能取树中结点的度没有限制,二叉树中结点的度只能取 0、1、2。空二叉树空二叉树ABCDEF一般二一般二叉树叉树根根左子树左子树右子右子树树第十章第十章树和二叉树树和二叉树根据定义,二叉
6、树通常具有根据定义,二叉树通常具有 5 种基本形态种基本形态:空二叉树空二叉树A仅有根结点的二叉树仅有根结点的二叉树A右子树为空的二叉树右子树为空的二叉树A左、右子树均非空左、右子树均非空的二叉树的二叉树A左子树为空的二叉树左子树为空的二叉树关于树的基本术语也都适用于二叉树。关于树的基本术语也都适用于二叉树。二叉二叉树与与树的区的区别树:1、树最少有一个根最少有一个根结点(点(n0)2、树的度的度 03、树不要求子不要求子树顺序序二叉二叉树:1、二叉、二叉树可以可以为空空(n0)2、二叉、二叉树的度的度23、二叉、二叉树是有序是有序树,有左、右子,有左、右子树之分。之分。例例10-1:试写出具
7、有写出具有3个个结点的所有不同形点的所有不同形态的的树和二叉和二叉树。二叉树的性质二叉树的性质性质性质1:在二叉树的第在二叉树的第 i 层上至多有层上至多有 2i-1 个结点个结点(i1)。归纳法证明归纳法证明:(1)i=1,只有一个根结点,只有一个根结点,2i-1=20=1,正确;,正确;(2)假设假设 i-1-1 成立,即第成立,即第 i-1-1 层上至多有层上至多有 2i-2 个结点;个结点;(3)由于二叉树的结点的度至多为由于二叉树的结点的度至多为 2,故在第,故在第 i 层上层上的最大结点数为第的最大结点数为第 i-1-1 层上的最大结点数的层上的最大结点数的 2 倍,即倍,即2 2
8、i-2=2i-1。性质性质2:深度为深度为 k 的二叉树至多有的二叉树至多有 2k 11 个结点个结点(k1)。i=1k(第第 i 层上的最大结点数层上的最大结点数)i=1k2i-1 2k 11练习练习:归纳法证明。归纳法证明。引论引论:一棵树有一棵树有 n 个结点,则必有个结点,则必有 n 1 条分支。条分支。证明证明:除根结点外,其它结点都有一个分支进入,除根结点外,其它结点都有一个分支进入,设设 B 为分支总数,故为分支总数,故 n=B+1,故故 B=n-1得证。得证。ABCDEF性质性质3:对任何一棵二叉树对任何一棵二叉树 T,如果其终端结点数为,如果其终端结点数为 n0,度为度为 2
9、 的结点数为的结点数为 n2,则,则 n0=n2+1。证明证明:(1)已知,终端结点数为已知,终端结点数为 n0,度为,度为 2 的结点数为的结点数为 n2,设度为设度为 1 的结点数为的结点数为 n1,由于二叉树中的所有结点的度只能为由于二叉树中的所有结点的度只能为 0、1、2,故二叉树的结点总数为故二叉树的结点总数为 n=n0+n1+n2;(2)除根结点外,其它结点都有一个分支进入,除根结点外,其它结点都有一个分支进入,设设 B 为分支总数,故为分支总数,故 n=B+1,由于这些分支均是由度为由于这些分支均是由度为 1 或或 2 的结点引出的,的结点引出的,所以有所以有 B=n1+2n2,
10、故,故 n=n1+2n2+1,由由(1)和和(2),可得,可得 n0+n1+n2=n1+2n2+1,故有故有 n0=n2+1。两种特殊形态二叉树两种特殊形态二叉树:满二叉树满二叉树、完全二叉树完全二叉树。一棵深度为一棵深度为 k 且有且有 2k-1 个结点的二叉树称为个结点的二叉树称为满二叉树满二叉树。特点特点:1 24 5满二叉树满二叉树3 67(1)每一层的结点数都达到每一层的结点数都达到最大结点数最大结点数。(2)叶子结点在叶子结点在最大层最大层。(3)任一结点,其左、右分支下的子孙的任一结点,其左、右分支下的子孙的最大层次相等最大层次相等。对满二叉树的结点进行连续编号,从根结点起,自上
11、而下,对满二叉树的结点进行连续编号,从根结点起,自上而下,自左至右,自左至右,1、2、3、2k-1。深度为深度为 k 的,有的,有 n 个结点的二叉树,个结点的二叉树,当且仅当当且仅当其每一个结其每一个结点都与深度为点都与深度为 k 的满二叉树中编号从的满二叉树中编号从 1 至至 n 的结点一一对的结点一一对应时,称为应时,称为完全二叉树完全二叉树。1 24 53 6 1 23 4 5非完全二叉树非完全二叉树 1 24 53完全二叉树完全二叉树(1)特点特点:(1)叶子结点只可能在层次最大的两层上出现。叶子结点只可能在层次最大的两层上出现。(2)对任一结点,若其右分支的子孙的最大层次为对任一结
12、点,若其右分支的子孙的最大层次为 l,则,则其左分支下的子孙的最大层次必为其左分支下的子孙的最大层次必为 l 或或 l+1。完全二叉树完全二叉树(2)1 24 53 67满二叉二叉树和完全二叉和完全二叉树的区的区别:1、满二叉二叉树一定是完全二叉一定是完全二叉树,它是完全二叉,它是完全二叉树的特例。的特例。2、完全二叉、完全二叉树不一定是不一定是满二叉二叉树。3、满二叉二叉树中中n1=0,完全二叉,完全二叉树中中n1=0或或1.性质性质4:具有具有 n 个结点的完全二叉树的深度为个结点的完全二叉树的深度为 log2n+1。证明证明:设设 n 结点完全二叉树的深度为结点完全二叉树的深度为 k,k
13、 层满二叉层满二叉树结点数树结点数k 层完全二层完全二叉树结点数叉树结点数k-1 层满二层满二叉树结点数叉树结点数因为,因为,故故 2k-1-1-1 n 2k-1 有有 2k-1-1 n 2k又又 k-1 log2n k因为因为 k 是整数,所以是整数,所以 k=log2n+1。性质性质5:如果对一棵有如果对一棵有n个结点的完全二叉树的结点按层序个结点的完全二叉树的结点按层序编号编号(从第从第 1 层到第层到第 log2n+1 层,每层从层,每层从左左到到右右),则,则对任一结点对任一结点 i(1in),有,有(1)如果如果 i=1,则结点,则结点 i 为根,无父亲;如果为根,无父亲;如果 i
14、 1,则结点,则结点 i 的父结点的父结点 parent(i)是结点是结点 i/2。/求父亲求父亲(2)如果如果 2i n,则结点,则结点 i 的左儿子的左儿子 LChild(i)是结点是结点 2i;否则无;否则无左儿子。左儿子。/求左儿子求左儿子(3)如果如果 2i+1 n,则结点,则结点 i 的右儿子的右儿子 RChild(i)是结点是结点 2i+1;否;否则无右儿子。则无右儿子。/求右儿子求右儿子证明证明(1):如果如果(2)、(3)成立,则成立,则(1)成立。成立。证明证明(2)和和(3):归纳法归纳法若有左儿子,应为若有左儿子,应为 2i=2;i=1:根结点根结点 1 23若有右儿子
15、,应为若有右儿子,应为 2i+1=3;设对结点设对结点 i 成立,即结点成立,即结点 i 的左儿子为结点的左儿子为结点 2i,右儿子为结点,右儿子为结点 2i+1;求证对结点求证对结点 i+1 也成立也成立:完全二叉树中,结点完全二叉树中,结点 i 和结点和结点 i+1 之间的关系通常有两种情况,之间的关系通常有两种情况,或在或在同一层同一层上,或分别在上,或分别在相邻两层相邻两层上,且上,且最左和最右最左和最右。i+1i2i2i+1 2i+22i+3情况情况 1i+1i2i2i+12i+22i+3情况情况 2i+1i2i2i+1 2i+22i+3情况情况 1i+1i2i2i+12i+22i+
16、3情况情况 2结点结点 i+1 的儿子的序号一定紧挨在结点的儿子的序号一定紧挨在结点 i 的儿子的序号的后面,的儿子的序号的后面,根据归纳假设,结点根据归纳假设,结点 i 的儿子的序号为的儿子的序号为 2i 和和2i+1,则结点则结点 i+1 的左、右儿子的序号应为的左、右儿子的序号应为2i+2=2(i+1)、2i+3=2(i+1)+1。若若 2(i+1)+1n 则无右儿子,若则无右儿子,若 2(i+1)n 则无左儿子。则无左儿子。得证。得证。二叉树的存储结构二叉树的存储结构(顺序、链式顺序、链式)1.顺序存储结构顺序存储结构用一组用一组地址连续地址连续的存储单元依次的存储单元依次自上而下、自
17、左至右自上而下、自左至右存储二叉树上的结点元素。存储二叉树上的结点元素。#define MAX_TREE_SIZE 100typedef TElemType SqBiTreeMAX_TREE_SIZE 1 24 53完全二叉树完全二叉树:编号为编号为 i 的元素存储在数组下标为的元素存储在数组下标为 i-1 的分量中;的分量中;123450 1 2 3 4 1 23 4 5一般二叉树一般二叉树:对照完全二叉树,存储在数组的相应分量中;对照完全二叉树,存储在数组的相应分量中;在最坏情况下,深度为在最坏情况下,深度为 k 的的右单支二叉树右单支二叉树需要需要 2k-1 个存储空间。个存储空间。1
18、23结论结论:顺序存储结构适用于存储完全二叉树。顺序存储结构适用于存储完全二叉树。空间浪费空间浪费12345000 表示不存在此结点表示不存在此结点0 1 2 3 4 5 6 7 12300000 1 2 3 4 5 6 7例10-3 一个深度为K且只有K个结点的二叉树顺序存储最多需要多少个存储空间?最少需要多少个?例10-4 一个完全二叉树结点个数为1000,则n0、n1、n2和高度h各为多少?2.链式存储结构链式存储结构D (root,DL,DR)。链表结点包含链表结点包含 3 个域个域:数据域数据域、左指针域左指针域、右指针域右指针域数据域数据域左指针域左指针域右指针域右指针域datar
19、childlchilddatalchildrchild由这种结点结构得到的二叉树存储结构称为由这种结点结构得到的二叉树存储结构称为二叉链表二叉链表。二叉链表存储表示二叉链表存储表示typedef struct BitNode BitNode,*BitTree;TElemType data;struct BitNode *lchild,*rchild;ABCDEFGH有时还可以在结点结构中增加一个指向父亲的指针。有时还可以在结点结构中增加一个指向父亲的指针。数据域数据域左指针域左指针域右指针域右指针域datarchildlchildfather父指针域父指针域datalchildrchildfa
20、ther采用何种存储结构,依赖于进行何种操作采用何种存储结构,依赖于进行何种操作基本操作基本操作 P:InitBiTree(&T)DestroyBiTree(&T)CreateBiTree(&T)BiTreeEmpty(T)InsertChild(T,A,X)操作操作:二叉树二叉树 T 存在,向存在,向 T 中插入一个信息域为中插入一个信息域为 A 的结点,的结点,作为作为 T 中信息域为中信息域为 X 的结点的左儿子,而其原来的左子树的结点的左儿子,而其原来的左子树为新结点的左子树为新结点的左子树。DeleteChild(T,p,LR)操作操作:根据根据 LR 为为 0 或或 1,删除,删除
21、 T 中中 p 所指结点的左或右子树。所指结点的左或右子树。PreOrderTraverse(T,visit()操作操作:先序遍历二叉树先序遍历二叉树 T。InOrderTraverse(T,visit()操作操作:中序遍历二叉树中序遍历二叉树 T。PostOrderTraverse(T,visit()操作操作:后序遍历二叉树后序遍历二叉树 T。LevelOrderTraverse(T,visit()操作操作:层次遍历二叉树层次遍历二叉树 T。二叉树的基本操作二叉树的基本操作遍历二叉树遍历二叉树遍历二叉树遍历二叉树:如何按某条如何按某条搜索路径搜索路径巡访树中每个结点,巡访树中每个结点,使得每
22、个结点均被使得每个结点均被访问一次访问一次,而且仅被访问一次。,而且仅被访问一次。D (root,DL,DR)。如果能依次遍历这三部分,就可以遍历整个二叉树;如果能依次遍历这三部分,就可以遍历整个二叉树;设以设以 D、L、R 分别表示分别表示访问根结点访问根结点、遍历左子树遍历左子树、遍遍历右子树历右子树,则可以存在,则可以存在 6 种遍历方案种遍历方案:DLR、DRL、LDR、LRD、RDL、RLD;若限定若限定先左后右先左后右的原则,则只有的原则,则只有 3 种情况种情况:先先(根根)序序遍历、遍历、中中(根根)序序遍历、遍历、后后(根根)序序遍历。遍历。DLRLDR、LRD、DLRRDL
23、、RLD、DRL先先(根根)序遍历序遍历:若二叉树为空,则返回;否则若二叉树为空,则返回;否则(1)访问根结点;访问根结点;(2)先先(根根)序遍历左子树;序遍历左子树;(3)先先(根根)序遍历右子树;序遍历右子树;A AABCA B CADBCD L RAD L RD L RBDCD L R先序遍历序列:先序遍历序列:A B D C先序遍历先序遍历:printf(T-data);PreOrderTraverse(T-lchild);PreOrderTraverse(T-rchild);if (T)Status PreOrderTraverse(BiTree T)算法算法 10.1 先序遍历递
24、归算法先序遍历递归算法else return OK;算法的C语言实现:void PreOrderTraverse(BiTree T)if(T!=NULL)printf(%dt,T-data);PreOrderTraverse(T-lchild);PreOrderTraverse(T-rchild);ABCDEFGH先序遍历先序遍历000000000beginend先序遍历顺序先序遍历顺序:A B D F G C E HABDFGCEH中中(根根)序遍历序遍历:若二叉树为空,则返回;否则若二叉树为空,则返回;否则(2)访问根结点;访问根结点;(1)中中(根根)序遍历左子树;序遍历左子树;(3)中
25、中(根根)序遍历右子树;序遍历右子树;A AABCB A CADBCL D RBL D RL D RADCL D R中序遍历序列:B D A C中序遍历:printf(T-data);InOrderTraverse(T-lchild);InOrderTraverse(T-rchild);If (T)else return OK;Status InOrderTraverse(BiTree T)算法算法 10.2 中序遍历递归算法中序遍历递归算法ABCDEFGH中序遍历中序遍历000000000beginend中序遍历顺序中序遍历顺序:ABDFGC E HBFDGACEH后后(根根)序遍历序遍历:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 树和二叉树 树和二叉树 PPT课件 二叉 PPT 课件
限制150内