大学数据结构课件树和二叉树.ppt
《大学数据结构课件树和二叉树.ppt》由会员分享,可在线阅读,更多相关《大学数据结构课件树和二叉树.ppt(51页珍藏版)》请在三一办公上搜索。
1、第6章 树和二叉树,前面讲的线性表主要表现的是数据元素之间的前后次序关系,是一种线性结构。树型结构是以分支关系定义的层次结构。树形结构在客观世界中广泛存在,如人类的家庭族谱及各种社会组织机构。又如计算机文件管理和信息组织也用到树形结构。本章讨论树的基本概念,重点讨论二叉树的有关概念、性质、存储结构和各种运算。,6.1.1 树的定义,树(tree)是由n(n0)个结点组成的有限集合T。n=0的树称为空树;对n0的树,有:(1)仅有一个特殊的结点称为根(root)结点,根结点没有前驱结点;(2)当n1时,除根结点外其余的结点分为m(m0)个互不相交的有限集合T1,T2,Tm,其中每个集合Ti本身又
2、是一棵树,称之为根的子树(subtree)。,注:树的定义具有递归性,即“树中还有树”。仅有一个根结点的树是最小树,,6.1 树基本概念和术语,6.1.2 若干术语(从结构上分),分支结点:度不为0的结点,除叶结点之外的其余结点。,结点(node):由数据元素和构造数据元素之间关系的指针组成,结点的度:结点所拥有的子树的个数,树的度:树中所有结点的度的最大值,叶结点:度为0的结点,也称作终端结点,结点的层次:从根结点到树中某结点所经路径上的分支数,树的深度:树中所有结点的层次的最大值,森林:m(m0)棵树的集合,6.1.2.若干术语(从关系上分),孩子(child)结点:树中一个结点的子树的根
3、结点双亲(parent)结点:若树中某结点有孩子结点,则这个结点就称作它的孩子结点的双亲结点 兄弟(sibling)结点:具有相同的双亲结点的结点,无序树:树中任意一个结点的各孩子结点之间的次序构成 无关紧要的树有序树:树中任意一个结点的各孩子结点有严格排列次序的树,6.1.2 若干术语(从结构上分),树的表示形式,6.1.4 树的抽象数据类型,数据集合:树的结点集合,每个结点由数据元素和构造数 据元素之间关系的指针组成。操作集合:(1)创建MakeTree(T)(2)撤消DestroyTree(T)(3)双亲结点Parent(T,curr)(4)左孩子结点LeftChild(T,curr)(
4、5)右兄弟结点RightSibling(T,curr)(6)遍历树Traverse(T,Visit(),树的存储结构,树的结点之间的逻辑关系主要有双亲-孩子关系,兄弟关系。因此,从结点之间的逻辑关系分,树的存储结构主要有:双亲表示法、孩子表示法、双亲孩子表示法和孩子兄弟表示法四种组合。指针有常规指针和仿真指针,(1)双亲表示法,(a)一棵树,(b)仿真指针的双亲表示法存储结构,树及其使用仿真指针的双亲表示法,(2)孩子表示法,常规指针的孩子表示法,双亲孩子表示法,(3)双亲孩子表示法,(4)孩子兄弟表示法,常规指针的孩子兄弟表示法,6.2 二叉树,二叉树(binary tree):是n(n0)
5、个结点的有限集合。n=0的树称为空二叉树;n0的二叉树由一个根结点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。其逻辑结构:一对二(1:2)左、右子树也是二叉树,所以子树也可以为空树。下图展现了五种不同形态的二叉树。,二叉树的定义,基本特征:每个结点最多只有两棵子树(不存在度大于2的结点);左子树和右子树次序不能颠倒。所以下面是两棵不同的树,二叉树的定义,满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的二叉树称为满二叉树。,完全二叉树:如果一棵深度为k,有n个结点的二叉树中各 结点能够与深度为k的顺序编号的满二叉树从1到n标号的 结
6、点相对应的二叉树称为完全二叉树。如下图所示,(a)满二叉树,(b)完全二叉树,数据集合:二叉树的结点集合,每个结点由数据元素和构造数据元素之间关系的指针组成。操作集合:(1)创建MakeTree(T)(2)撤消DestroyTree(T)(3)左插入结点InsertLeftNode(curr,x)(4)右插入结点InsertRightNode(curr,x)(5)左删除子树DeleteLeftTree(curr)(6)右删除子树DeleteRightTree(curr)(7)遍历二叉树Traverse(T,Visit(),二叉树抽象数据类型,二叉树的重要性质,性质1:二叉树的第i(i1)层上至
7、多有2i-1个结点。,二叉树的重要性质,性质2:深度为k(k1)的二叉树至多有2k-1个结点。,证明一:20+21+22+2k-1=2k-1,1+,-1,=21,=22,=23,=2k-1,=2k,=20,1 00 0 0,+1,证明三:等比数列前n项和的计算公式:,证明二:,n=k,a1=1,q=2,性质3 对于一棵非空的二叉树,如果叶结点个数为n0,度为2的结点数为n2,则有n0=n2+1。,n0=n2+1。,证明:设n为二叉树的结点总数,n1为二叉树中度为1的结点个数,则有:,n=n0+n1+n2(1),由于二叉树中除根结点外,每个结点都有一条与其父结点相连的边。所以,有n个结点的二叉树
8、总共有 n-1条边。于是有:,n-1=0n0+1n1+2n2(2),再把(1)代入(2),得:,n0+n1+n2-1=n1+2n2,则可以得到:,性质4:具有n个结点的完全二叉树的深度为log2(n)+1。,k-1=log2(n),证明:根据性质2,对于有n个结点的深度为k的完全二叉树有:,2k-1-1n2k-1,因为该不等式各项均为整数,当对两端各加1时不等式发生变化得:,2k-1 n 2k,对不等式求对数,有,k-1log2(n)k,因为k必须是整数,所以对log2(n)取整,即log2(n),显然得到:,即:k=log2(n)+1,性质5:对于一棵有n个结点的完全二叉树,按照从上至下和从
9、左至右的顺序对所有结点从1开始顺序编号。,当i=1时,该结点为根结点,它无双亲结点;,则对于序号为 i 的结点(1in),有:,当i1时,其双亲是结点i/2(“/”表示整除);,若2in,则第i个结点有编号为2i的左孩子;,若2i+1n,则第i 个结点有编号为2i+1的右孩子,完全二叉树的结点可按从上到下和从左至右的次序存储在一维数组中,其结点之间的关系可由公式计算得到,这就是二叉树的顺序存储结构。下面两棵树在数组中的存储结构分别为:,二叉树的存储结构,二叉树的存储结构有多种,最常用的有两种:,顺序存储结构和链表存储结构,1.二叉树的顺序存储结构,满二叉树:,结点:i=5,父结点:i/2=5/
10、2=2,左孩子:2i=2*5=10,右孩子:2i+1=2*5+1=11,完全二叉树:,对于一般的非完全二叉树,必须首先在非完全二叉树中增添一些并不存在的空结点使之变成完全二叉树的形态。,然后再用顺序存储结构存储在一维数组中。,显然不能直接使用二叉树的顺序存储结构。,所以,顺序存储结构仅适于满二叉树或完全二叉树,一般二叉树更适宜用链表存储结构,二叉树的链式存储结构是用指针建立二叉树中结点之间的关系。二叉树最常用的的链式表储结构是二叉链和三叉链。二叉链存储结构的每个结点包含三个域,分别是数据域data、左孩子指针域leftChild和右孩子指针域rightChild。二叉链存储结构中每个结点的图示
11、结构为:,三叉链表的结点比前者多了一个指向双亲的指针域。,2.二叉树的链式存储结构,结点结构描为:,typedef struct node ElemType data;struct node*lch,*rch;Bnode;,typedef struct node ElemType data;struct node*lch,*par,*rch;/*par是双亲指针域*/Bnode3;,结点结构描为:,二叉链表,三叉链表,二叉树,二叉树的仿真指针存储结构是用数组存储二叉树中的结点,数组中每个结点除数据元素域外,再增加仿真指针域用于仿真常规指针建立二叉树中结点之间的关系。,二叉树的仿真二叉链存储结构
12、,B,A,C,D,G,二叉树的仿真指针,6.2.5 二叉树二叉链表的一个生成算法,创建二叉树的方法有多种,并且算法都比较复杂,这里我们运用二叉树的性质5,学习一种较简单的生成算法。,对任意二叉树,首先按满二叉树的结构对其结点进行编号。,此树并非完全二叉树,因此结点编号不连续。算法中用一个辅助向量s存放树结点的指针。该向量的类型为:Bnode*sMAXSIZE,Bnode*creat()Bnode*t=NULL;printf(“n i,x=”);scanf(“%d%d”,/*creat end*/,typedef struct node ElemType data;struct node*lch
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 数据结构 课件 二叉
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6561313.html