大学数据结构课件树和二叉树.ppt
《大学数据结构课件树和二叉树.ppt》由会员分享,可在线阅读,更多相关《大学数据结构课件树和二叉树.ppt(51页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6 6章章 树和二叉树树和二叉树前前面面讲讲的的线线性性表表主主要要表表现现的的是是数数据据元元素素之之间间的的前前后次序关系,是一种线性结构。后次序关系,是一种线性结构。树树型型结结构构是是以以分分支支关关系系定定义义的的层层次次结结构构。树树形形结结构构在在客客观观世世界界中中广广泛泛存存在在,如如人人类类的的家家庭庭族族谱谱及及各各种种社社会会组组织织机机构构。又又如如计计算算机机文文件件管管理理和和信信息息组组织织也也用用到到树树形形结结构构。本本章章讨讨论论树树的的基基本本概概念念,重重点点讨讨论论二二叉叉树的有关概念、性质、存储结构和各种运算。树的有关概念、性质、存储结构和各种
2、运算。6.1.1 6.1.1 6.1.1 6.1.1 树的定义树的定义树的定义树的定义树树(tree)是由是由n(n0)个结点组成的有限集合个结点组成的有限集合T。n=0的的树称为空树;对树称为空树;对n0的树,有的树,有:(1)仅有仅有一个特殊的结点称为根一个特殊的结点称为根(root)结点结点,根结点,根结点没有前驱结点;没有前驱结点;(2)当当n1时,除根结点外其余的结点分为时,除根结点外其余的结点分为m(m0)个个互互不相交不相交的有限集合的有限集合T1,T2,Tm,其中每个集合,其中每个集合Ti本身又本身又是一棵树,称之为根的子树(是一棵树,称之为根的子树(subtree)。)。注:
3、注:树的定义具有树的定义具有递归性递归性,即,即“树中还有树树中还有树”。仅有一个根结点的树是最小树,仅有一个根结点的树是最小树,6.1 6.1 树基本概念和术语树基本概念和术语 6.1.2 6.1.2 若干术语若干术语若干术语若干术语(从结构上分)(从结构上分)(从结构上分)(从结构上分)分支结点:分支结点:度不为度不为0 0的结点,除叶结点之外的其余结点。的结点,除叶结点之外的其余结点。ABCGEIDHFJMLK结点(结点(nodenode):):由数据元素由数据元素和构造数据元素之间关系的和构造数据元素之间关系的指针组成指针组成结点的度:结点的度:结点所拥有结点所拥有的子树的个数的子树的
4、个数树的度:树的度:树中所有结点的度的最大值树中所有结点的度的最大值叶结点:叶结点:度为度为0 0的结点,也称作的结点,也称作终端结点终端结点结点的层次:结点的层次:从根结点到树中某结点所经路径上的分支数从根结点到树中某结点所经路径上的分支数树的深度:树的深度:树中所有结点的层次的最大值树中所有结点的层次的最大值 森林:森林:m m(m m00)棵树的集合)棵树的集合 6.1.2.6.1.2.若干术语若干术语若干术语若干术语(从关系上分)(从关系上分)(从关系上分)(从关系上分)孩子孩子(child)(child)结点结点:树中一个结点的子树的根结点树中一个结点的子树的根结点双亲双亲(pare
5、nt)(parent)结点:结点:若树中某结点有孩子结点,则这个若树中某结点有孩子结点,则这个结点就称作它的孩子结点的双亲结点结点就称作它的孩子结点的双亲结点 兄弟兄弟(sibling)(sibling)结点:结点:具有相同的双亲结点的结点具有相同的双亲结点的结点 ABCGEIDHFJMLK无序树:无序树:树中任意一个结点的各孩子结点之间的树中任意一个结点的各孩子结点之间的次序构成次序构成 无关紧要无关紧要的树的树有序树:有序树:树中任意一个结点的各孩子结点有严格排列次序的树树中任意一个结点的各孩子结点有严格排列次序的树 6.1.2 6.1.2 若干术语若干术语若干术语若干术语(从结构上分)(
6、从结构上分)(从结构上分)(从结构上分)BEFLKBFELK 树的表示形式树的表示形式树的表示形式树的表示形式(1)(1)倒悬树法倒悬树法(直观表示直观表示)(2)(2)集合包含关系图法集合包含关系图法 (3)(3)凹入表示法凹入表示法 ABCGEIDHFJMLK FEKLCGA ABI IJ JMDHABCDEFGHIJKLM6.1.4 6.1.4 树的抽象数据类型树的抽象数据类型树的抽象数据类型树的抽象数据类型数据集合数据集合:树的结点集合,每个结点由数据元素和构造数树的结点集合,每个结点由数据元素和构造数 据元素之间关系的指针组成。据元素之间关系的指针组成。操作集合操作集合:(1 1)创
7、建)创建MakeTree(T)MakeTree(T)(2 2)撤消)撤消DestroyTree(T)DestroyTree(T)(3 3)双亲结点)双亲结点Parent(T,curr)Parent(T,curr)(4 4)左孩子结点)左孩子结点LeftChild(T,curr)LeftChild(T,curr)(5 5)右兄弟结点)右兄弟结点RightSibling(T,curr)RightSibling(T,curr)(6 6)遍历树)遍历树Traverse(T,Visit()Traverse(T,Visit()树的存储结构树的存储结构树的存储结构树的存储结构 树的结点之间的逻辑关系主要有双
8、亲树的结点之间的逻辑关系主要有双亲-孩子孩子关系,兄弟关系。因此,从结点之间的逻辑关系关系,兄弟关系。因此,从结点之间的逻辑关系分,树的存储结构主要有:分,树的存储结构主要有:双亲表示法、孩子表双亲表示法、孩子表示法、双亲孩子表示法和孩子兄弟表示法示法、双亲孩子表示法和孩子兄弟表示法四种组四种组合。合。指针有指针有常规指针常规指针和和仿真指针仿真指针4H2G1F1E1D0C0B-1AI4data parentdata parent0 01 12 23 34 45 56 67 78 8(1)(1)双亲表示法双亲表示法(a)一棵树一棵树(b)仿真指针的双亲表示法存储结构仿真指针的双亲表示法存储结构
9、树及其使用仿真指针的双亲表示法树及其使用仿真指针的双亲表示法ABCFGEIHD(2)(2)孩子表示法孩子表示法常规指针的孩子表示法常规指针的孩子表示法BCrootAD EF GIH ABCFGEIHD双亲孩子表示法双亲孩子表示法(3)(3)双亲孩子表示法双亲孩子表示法4H2G1F1E1D0C0B-1AI4data parent headdata parent head012345678child nextchild next87123456ABCFGEIHD(4)(4)孩子兄弟表示法孩子兄弟表示法常规指针的孩子兄弟表示法常规指针的孩子兄弟表示法rootBCDEFGHIAABCFGEIHD6.2
10、 二叉树二叉树二叉树二叉树(binary tree):是是n(n0)个结点的有限集合。个结点的有限集合。n=0的树称为空二叉树;的树称为空二叉树;n0的二叉树由一个根结点以的二叉树由一个根结点以及两棵互不相交的、分别称为及两棵互不相交的、分别称为左子树和右子树左子树和右子树的的二叉树组成二叉树组成。其。其逻辑结构:逻辑结构:一对二(一对二(1:2)左、右子树也是二叉树,所以子树也可以为空树。下图左、右子树也是二叉树,所以子树也可以为空树。下图展现了五种不同形态的二叉树。展现了五种不同形态的二叉树。二叉树的定义二叉树的定义二叉树的定义二叉树的定义n=0n=0n=1n=1n1n1n1n1n1n1基
11、本特征基本特征:每个结点最多只有两棵子树(不存在度大于每个结点最多只有两棵子树(不存在度大于2的结点);的结点);左子树和右子树左子树和右子树次序不能颠倒次序不能颠倒。所以下面是两棵不同的树。所以下面是两棵不同的树 二叉树的定义二叉树的定义二叉树的定义二叉树的定义BACEDFGBACEDFG满二叉树:满二叉树:在一棵二叉树中,如果所有分支结点都存在左在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样子树和右子树,并且所有叶子结点都在同一层上,这样的二叉树称为满二叉树。的二叉树称为满二叉树。BACEDFGHIJKLMNO完全二叉树:完全二叉树:如果一棵深度为
12、如果一棵深度为k k,有,有n n个结点的二叉树中各个结点的二叉树中各 结点能够与深度为结点能够与深度为k k的顺序编号的满二叉树从的顺序编号的满二叉树从1 1到到n n标号的标号的 结点相对应的二叉树称为完全二叉树。如下图所示结点相对应的二叉树称为完全二叉树。如下图所示BACEDFGHIJBACEDFGHIJKLMNO(a)满二叉树满二叉树 (b)完全二叉树完全二叉树 数据集合:数据集合:二叉树的结点集合,每个结点由数据元素和构造数二叉树的结点集合,每个结点由数据元素和构造数据元素之间关系的指针组成。据元素之间关系的指针组成。操作集合:操作集合:(1 1)创建)创建MakeTree(T)Ma
13、keTree(T)(2 2)撤消)撤消DestroyTree(T)DestroyTree(T)(3 3)左插入结点)左插入结点InsertLeftNode(curr,x)InsertLeftNode(curr,x)(4 4)右插入结点)右插入结点InsertRightNode(curr,x)InsertRightNode(curr,x)(5 5)左删除子树)左删除子树DeleteLeftTree(curr)DeleteLeftTree(curr)(6 6)右删除子树)右删除子树DeleteRightTree(curr)DeleteRightTree(curr)(7 7)遍历二叉树)遍历二叉树T
14、raverse(T,Visit()Traverse(T,Visit()二叉树抽象数据类型二叉树抽象数据类型二叉树抽象数据类型二叉树抽象数据类型k=ik=i2 2i-1-1 二叉树的重要性质二叉树的重要性质二叉树的重要性质二叉树的重要性质性质性质1 1:二叉树的第二叉树的第二叉树的第二叉树的第i i(i i1 1)层上至多有)层上至多有)层上至多有)层上至多有2 2i-1i-1个结点。个结点。个结点。个结点。i=1i=1 2 21-11-1=2=20 0=1=1i=2i=22 22-12-1=2=21 1=2=2i=3i=32 23-13-1=2=22 2=4=4BACEDFGHIJKLMNOi
15、=4i=42 24-14-1=2=23 3=8=8k=ik=i 二叉树的重要性质二叉树的重要性质二叉树的重要性质二叉树的重要性质性质性质2:2:深度为深度为深度为深度为k(k1)k(k1)的二叉树至多有的二叉树至多有的二叉树至多有的二叉树至多有2 2k k-1-1个结点。个结点。个结点。个结点。k3 2 1k3 2 1 0 00 0 0 00 0 1 1 2 20 0 0 00 0 00 1 1 0 2 0 21 1 0 0 0 01 1 0 0 2 0 0 22 2 +0 0 1 10 0 0 20 0 0 2k-1k-1 0 11 1 1 2 0 11 1 1 2k k-1-1 证明一:证
16、明一:证明一:证明一:2 2 2 20 0 0 0+2+2+2+21 1 1 1+2+2+2+22 2 2 2+2+2+2+2k-1k-1k-1k-1 =2 =2 =2 =2k k k k-1-1-1-11+1+1+1+-1-1-1-1=2=21 1=2=22 2=2=23 3=2=2k-1k-1=2=2k k=2=20 01 00 0 01 00 0 0+1 1k kBACEDFGHIJKLM NOk=ik=i2 2i-1-1证明三:证明三:证明三:证明三:等比数列前等比数列前等比数列前等比数列前n n n n项和的计算公式:项和的计算公式:项和的计算公式:项和的计算公式:证明二:证明二:证
17、明二:证明二:n=kn=ka a1 1=1=1q=2q=2性性质质3 3 对对于于一一棵棵非非空空的的二二叉叉树树,如如果果叶叶结结点点个个数数为为n n0 0,度为度为2 2的结点数为的结点数为n n2 2,则有,则有n n0 0=n=n2 2+1+1。BACEDFGHIJn0=n2+1。证明:设证明:设n n为二叉树的结点总数,为二叉树的结点总数,n n1 1为二叉树为二叉树中度为中度为1 1的结点个数,则有:的结点个数,则有:n=nn=n0 0+n+n1 1+n+n2 2 (1)(1)由于二叉树中除根结点外,由于二叉树中除根结点外,每个结点都有一条与其父每个结点都有一条与其父结点相连的边
18、。所以,有结点相连的边。所以,有n n个结点的二叉树总共有个结点的二叉树总共有 n-1n-1条边。于是有:条边。于是有:n-1=0nn-1=0n0 0+1n+1n1 1+2n+2n2 2 (2)(2)再把再把(1)(1)代入代入(2)(2),得:,得:n n0 0+n n1 1+n+n2 2-1=n-1=n1 1+2n+2n2 2则可以得到则可以得到:性质性质性质性质4:4:4:4:具有具有具有具有n n个结点的完全二叉树的深度为个结点的完全二叉树的深度为个结点的完全二叉树的深度为个结点的完全二叉树的深度为 loglog2 2(n(n)+1。k-1-1=loglog2 2(n(n)BACEDF
19、GHIJ证明:根据性质证明:根据性质2 2,对于有对于有n n个结个结点的深度为点的深度为k k的完全二叉树有的完全二叉树有:2 2k-1k-1-1-1n n22k k-1-1 因为该不等式各项均为整数,当对两端各加因为该不等式各项均为整数,当对两端各加1 1时不时不等式发生变化得:等式发生变化得:2 2k-1 k-1 n n 2 2k k对不等式求对数,有对不等式求对数,有k-1k-1loglog2 2(n n)1i1时,其双亲是结点时,其双亲是结点i/2 i/2(“/”(“/”表示整除);表示整除);若若2in2in,则第,则第i i个结点有编号为个结点有编号为2i2i的左孩子;的左孩子;
20、若若2i+1n2i+1n,则第,则第i i 个结点有编号为个结点有编号为2i+12i+1的右孩子的右孩子 完全二叉树的结点可按从上到下和从左至右的次完全二叉树的结点可按从上到下和从左至右的次序存储在一维数组中,其结点之间的关系可由公式计序存储在一维数组中,其结点之间的关系可由公式计算得到,这就是二叉树的顺序存储结构。下面两棵树算得到,这就是二叉树的顺序存储结构。下面两棵树在数组中的存储结构分别为:在数组中的存储结构分别为:二叉树的存储结构二叉树的存储结构二叉树的存储结构二叉树的存储结构二叉树的存储结构有多种,最常用的有两种:二叉树的存储结构有多种,最常用的有两种:顺序存储结构和链表存储结构顺序
21、存储结构和链表存储结构1.1.二叉树的顺序存储结构二叉树的顺序存储结构BACEDFGHIJKLMNO1204357611810912 13 14 15DA BCONMLKJIHGFE1 12 23 34 45 56 67 78 89 9 1010n=15n=1511111212131314141515满二叉树:满二叉树:结点:结点:i=5i=5父结点:父结点:i/2=5/2=2i/2=5/2=2左孩子:左孩子:2i=2*5=102i=2*5=10右孩子:右孩子:2i+1=2*5+1=112i+1=2*5+1=11完全二叉树:完全二叉树:BACEDFGHIJ1 12 23 34 45 56 67
22、 78 89 9 1010n=10n=10120435768910A BCDJIHGFE对于一般的非完全二叉树对于一般的非完全二叉树BACEGDFA BCGFED1204357611810912数组数组下标下标13 必须首先在非完全二叉树中增添一些并不存在的空结点使之必须首先在非完全二叉树中增添一些并不存在的空结点使之变成完全二叉树的形态。变成完全二叉树的形态。然后再用顺序存储结构存储在一维数组中。然后再用顺序存储结构存储在一维数组中。显然不能直接使用二叉树的顺序存储结构。显然不能直接使用二叉树的顺序存储结构。所以,顺序存储结构仅适于满二叉树或完全二叉树,一般二叉树所以,顺序存储结构仅适于满二
23、叉树或完全二叉树,一般二叉树更适宜用链表存储结构更适宜用链表存储结构二叉树的链式存储结构是用指针建立二叉树中结点之间的关系。二叉树的链式存储结构是用指针建立二叉树中结点之间的关系。二叉二叉树最常用的的链式表储结构是二叉链和三叉链。树最常用的的链式表储结构是二叉链和三叉链。二叉链存储结构的每二叉链存储结构的每个结点包含三个域,分别是数据域个结点包含三个域,分别是数据域data、左孩子指针域、左孩子指针域leftChild和右孩和右孩子指针域子指针域rightChild。二叉链存储结构中每个结点的图示结构为:。二叉链存储结构中每个结点的图示结构为:rightChilddataleftChild 三
24、叉链表的结点比前者多了三叉链表的结点比前者多了一个指向双亲的指针域。一个指向双亲的指针域。2.2.二叉树的链式存储结构二叉树的链式存储结构结点结构描为:结点结构描为:typedef struct node ElemType data;struct node*lch,*rch;Bnode;typedef struct node ElemType data;struct node*lch,*par,*rch;/*par是双亲指针域是双亲指针域*/Bnode3;parrchdatalch结点结构描为:结点结构描为:A BCD F J K ABCDFJK BACDJFK二叉链表二叉链表三叉链表三叉链表
25、二叉树二叉树二叉树的仿真指针存储二叉树的仿真指针存储结构结构是用数组存储二叉树中的结点,是用数组存储二叉树中的结点,数组中每个结点除数据元素域外,再增加仿真指针域用于仿数组中每个结点除数据元素域外,再增加仿真指针域用于仿真常规指针建立二叉树中结点之间的关系。真常规指针建立二叉树中结点之间的关系。二叉树的仿真二叉链存储结构二叉树的仿真二叉链存储结构BACDGEF二叉树的仿真指针二叉树的仿真指针6.2.5 二叉树二叉链表的一个生成算法二叉树二叉链表的一个生成算法 创建二叉树的方法有多种,并且算法都比较复杂,这里我们运创建二叉树的方法有多种,并且算法都比较复杂,这里我们运用二叉树的性质用二叉树的性质
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 数据结构 课件 二叉
限制150内