数据结构(C语言版)6、树和二叉树.ppt
《数据结构(C语言版)6、树和二叉树.ppt》由会员分享,可在线阅读,更多相关《数据结构(C语言版)6、树和二叉树.ppt(100页珍藏版)》请在三一办公上搜索。
1、第6章 树和二叉树,本章中主要介绍下列内容:树的逻辑定义和基本术语 二叉树的逻辑定义及存储结构 二叉树的基本操作算法(*遍历算法)树、森林和二叉树的转换 哈夫曼树及其应用,6.树的逻辑定义和基本术语6.1 树6.2 二叉树6.3 树、森林与二叉树的转换6.3 哈夫曼树及其应用,6.1 树_TREE,6.1.1 树的定义和基本运算mathematical concept-Abstract data type-Data structure-Implementation-Application1.定义:树是一种常用的非线性结构。我们可以这样定义:树是n(n0)个结点的有限集合。若n=0,则称为空树;
2、否则,有且仅有一个特定的结点被称为根,当n1时,其余结点被分成m(m0)个互不相交的子集T1,T2,.,Tm,每个子集又是一棵树。由此可以看出,树的定义是递归。,图 6-1,E F G H I J,B C D,A,A,(a),(b),(c),结点(node/vertex)数据元素的内容及其指向其子树根的分支统称为结点。结点的度(degree)结点的分支数。终端结点(叶子leaf)度为0的结点。非终端结点 度不为0的结点。结点的层次(level)树中根结点的层次为1,根结点子树的根为第2层,以此类推。树的度 树中所有结点度的最大值。树的深度depth 树中所有结点层次的最大值。有序树(order
3、ed tree)、无序树 如果树中每棵子树从左向右的排列拥有一定的顺序,不得互换,则称为有序树,否则称为无序树。,森林(forest)是m(m0)棵互不相交的树的集合。在树结构中,结点之间的关系又可以用家族关系描述,定义如下:孩子child、双亲parent 结点子树的根称为这个结点的孩子,而这个结点又被称为孩子的双亲。结点的子孙 descendant 以某结点为根的子树中的所有结点都被称为是该结点的子孙。结点的祖先ancestor 从根结点到该结点路径上的所有结点。兄弟sibling 同一个双亲的孩子之间互为兄弟。堂兄弟 双亲在同一层的结点互为堂兄弟。,2.树的基本运算 常用操作:(1)构造
4、一个树 CreateTree(T)(2)清空以T为根的树 ClearTree(T)(3)判断树是否为空 TreeEmpty(T)(4)获取给定结点的第i个孩子 Child(T,node,i)(5)获取给定结点的双亲 Parent(T,node)(6)遍历树Traverse(T)对树遍历的主要目的是将非线性结构通过遍历过程线性化,即获得一个线性序列。树的遍历顺序有两种,一种是先序遍历,即先访问根结点,然后再依次用同样的方法访问每棵子树;另一种是后序遍历,即先依,6.1.2 树的存储结构 应用一段连续的存储空间存储树,要求存储结构能表示逻辑结构,即满足树的定义,即同一结点有多个不同的后继,或多个结
5、点具有同一前驱,并且不存在相交的子树。1.双亲表示法:树的双亲表示法主要描述的是结点的双亲关系,不但要存储树中结点数据元素本身的值,而且要存储结点双亲所在的位置。如图2所示:,图 6-2根结点A存储于第0位置,无双亲,故双亲的存储位置标志设置为-1,结点B C D依次存储于1 2 3位置,其双亲所在位置是0;.,类型定义:#define MAX_TREE_NODE_SIZE 100typedef struct ParentNode EelemType info;/树中数据元素数据类型 int parent;/其双亲结点的存储位置;typedef struct ParentTree Parent
6、Node itemMAX_TREE_NODE_SIZE;int n;/树中当前的结点数目;,这种存储方法的特点是寻找结点的双亲很容易,但寻找结点的孩子比较困难。算法实现举例,求双亲结点所在位置:int Parent(ParentTree T,int node)/返回第node个结点的双亲所在的位置 if(node=T.n)return-1;else printf(“parent elem is:%?”,T.itemparent.info);return T.itemnode.parent;,双亲表示法数据类型进一步解释:ParentTree数据类型有两个域,即 ParentTree.item
7、和ParentTree.n;每一个item i有两个域,即数据元素的数值info和双亲所在位置parent;结合图 6-2存储示意图如下:ParentTree.n=10/树中有10个结点ParentTree.item 域示意图如下:,2.孩子表示法 孩子表示法主要描述的是结点的孩子关系。由于每个结点的孩子个数不定,所以利用链式存储结构更加适宜。举例:,图 6-3 孩子表示法结构示意图 显然ChildNode和TNode不时同类型的结点.,0 A 1 2 3 1 B 4 5 2 C 3 D 4 E 5 F 6 G 7 8 9 7 H 8 I 9 J,ChildNode,TNode,ChildTr
8、ee,在C语言中,这种存储形式定义如下:#define MAX_TREE_NODE_SIZE 10typedef struct ChildNode int child;/该孩子结点在一维数组中的下标值 struct ChileNode*next;/指向下一个孩子结点;typedef struct TNode TElemType data;/结点信息 ChildNode*firstchild;/指向第一个孩子结点的指针;,typedef struct ChildTree TNode itemMAX_TREE_NODE_SIZE;int n,root;/n为树中当前结点的数目,root为根结点在一
9、维数组中的位置;这种存储结构的特点是寻找某个结点的孩子比较容易,但寻找双亲比较麻烦,所以,在必要的时候,可以将双亲表示法和孩子表示法结合起来,即将一维数组元素增加一个表示双亲结点的域parent,用来指示结点的双亲在一维数组中的位置。,孩子表示法数据类型进一步解释:,ChildTree结构体数据类型包含三个域:TNode类型的一维数组、树中当前结点的总数n、树根所在的位置root,示意图如下:,数组中的每一个数据元素有2个域:结点本身的数值data,指向第一个孩子的指针;,next指针所指向的存储空间ChildNode又有两个域:孩子结点所在数组的下标值,指向下一个孩子结点的指针。,获取给定结
10、点第i个孩子的操作算法实现:int Child(ChildTree T,int node,int i)/求树T中第node个结点的第i个孩子所在的位置 if(node=T.n)return-2;p=T.itemnode.firstchild;j=1;while(p/返回第i个孩子所在的位置,3.孩子兄弟表示法(树、森林转换为二叉树的方法)孩子兄弟表示法也是一种链式存储结构。它通过描述每个结点的一个孩子和兄弟信息来反映结点之间的层次关系,其结点结构为:,其中,firstchild为指向该结点第一个孩子的指针,nextsibling为指向该结点的下一个兄弟,item是数据元素内容。举例:,树型结构
11、如下:,孩子兄弟表示法存储结构示意图如下:,图 6-4 孩子兄弟标示方法一个结点的左子树当作是该结点的孩子,右子树当作是该结点的兄弟;,在C语言中,这种存储形式定义如下:typedef struct CSNode ElemType item;struct CSNode*firstchild,*nextsibling;*CSTree;/CSTree存放的是CSNode这种结点的地址;void AllChild(CSTree T,CSTree p)/输出树中p指针所指结点的所有孩子信息/输出结点的第一个孩子及第一个孩子的兄弟 q=p-fisrtchild;while(q)printf(“%c”,q
12、-item);q=q-nextsibling;,.2 二叉树(Binary tree),.2.1 二叉树的定义和基本运算1.定义 定义:二叉树是另一种树形结构。它与树形结构的区别是:(1)每个结点最多有两棵子树;(2)子树有左右之分。二叉树也可以用递归的形式定义。即:二叉树是n(n0)个结点的有限集合。当n=0时,称为空二叉树;当n0时,有且仅有一个结点为二叉树的根,其余结点被分成两个互不相交的子集,一个作为左子集,另一个作为右子集,每个子集又是一个二叉树。,图 6-6 二叉树示意图,G H,D E F,B C,A,二叉树的5种形态:,图 6-7,(a),(b),(c),(d),(e),2.二
13、叉树的基本运算(1)构造一棵二叉树 CreateBTree(BT)(2)清空以BT为根的二叉树 ClearBTree(BT)(3)判断二叉树是否为空 BTreeEmpty(BT)(4)获取给定结点的左孩子和右孩子LeftChild(BT,node),RightChild(BT,node)(5)获取给定结点的双亲 Parent(BT,node)(6)遍历二叉树Traverse(BT),2二叉树的性质二叉树具有下列5个重要的性质。【性质1】在二叉树的第i层上最多有2i-1个结点(i1)。二叉树的第1层只有一个根结点,所以,i=1时,2i-1=21-1=20=1成立。假设对所有的j,1ji成立,即第
14、j层上最多有2j-1个结点成立。若j=i-1,则第j层上最多有2j-1=2i-2个结点。由于在二叉树中,每个结点的度最大为2,所以可以推导出第i层最多的结点个数就是第i-1层最多结点个数的2倍,即2i-2*2=2i-1。,【性质2】深度为K的二叉树最多有2K-1个结点(K1)。由性质1可以得出,1至K层各层最多的结点个数分别为:20,21,22,23,.,2K-1。这是一个以2为比值的等比数列,前n项之和的计算公式为:,其中 a1为第一项,an为第n项,q为比值。可以得到,该数列前K项之和为:,【性质3】对于任意一棵二叉树BT,如果度为0的结点个数为n0,度为2的结点个数为n2,则n0=n2+
15、1。证明:假设度为1的结点个数为n1,结点总数为n,B为二叉树中的分支数。因为在二叉树中,所有结点的度均小于或等于2,所以结点总数为:n=n0+n1+n2(1)再查看一下分支数。在二叉树中,除根结点之外,每个结点都有一个从上向下的分支指向该结点,所以,总的结点个数n与分支数B之间的关系为:n=B+1。,又因为在二叉树中,度为1的结点产生1个分支,度为2的结点产生2个分支,所以分支数B可以表示为:B=n1+2n2。将此式代入上式,得:n=n1+2n2+1(2)用(1)式减去(2)式,并经过调整后得到:n0=n2+1。满二叉树:如果一个深度为K的二叉树拥有2K-1个结点,则将它称为满二叉树。,图
16、6-8,8 9 10 11 12 13 14 15,4 5 6 7,2 3,1,完全二叉树:有一棵深度为h,具有n个结点的二叉树,若将它与一棵同深度的满二叉树中的所有结点按从上到下,从左到右的顺序分别进行编号,且该二叉树中的每个结点分别与满二叉树中编号为1n的结点位置一一对应,则称这棵二叉树为完全二叉树。,【性质4】具有n个结点的完全二叉树的深度为 log2n+1。其中,log2n 的结果是不大于log2n的最大整数。证明:假设具有n个结点的完全二叉树的深度为K,则根据性质2可以得出:2K-1-1n2K-1 将不等式两端加1得到:2K-1n2K 将不等式中的三项同取以2为底的对数,并经过化简后
17、得到:K-1log2nK 由此可以得到:log2n=K-1。整理后得到:K=log2n+1。,【性质5】对于有n个结点的完全二叉树中的所有结点按从上到下,从左到右的顺序进行编号,则对任意一个结点i(1in),都有:(1)如果i=1,则结点i是这棵完全二叉树的根,没有双亲;否则其双亲结点的编号为 i/2。(2)如果2in,则结点i没有左孩子;否则其左孩子结点的编号为2i。(3)如果2i+1n,则结点i没有右孩子;否则其右孩子结点的编号为2i+1。下面我们利用数学归纳法证明这个性质。我们首先证明(2)和(3)。当i=1时,若n3,则根的左、右孩子的编号分别是2,3;若n3,则根没有右孩子;若n2,
18、则根将没有左、右孩子;以上对于(2)和(3)均成立。假设:对于所有的1ji 结论成立。即:结点j的左孩子编号为2j;右孩子编号为2j+1。,图 6-10,2i+2,2i 2i+1 2i+2 2i+3 i+1 2i 2i+1,i,i i+1,由完全二叉树的结构可以看出:结点i+1或者与结点i同层且紧邻i结点的右侧,或者i位于某层的最右端,i+1位于下一层的最左端。可以看出,i+1的左、右孩子紧邻在结点i的孩子后面,由于结点i 的左、右孩子编号分别为2i和2i+1,所以,结点i+1的左、右孩子编号分别为2i+2和2i+3,经提取公因式可以得到:2(i+1)和2(i+1)+1,即结点i+1的左孩子编
19、号为2(i+1);右孩子编号为2(i+1)+1。又因为二叉树由n个结点组成,所以,当2(i+1)+1n,且2(i+1)=n时,结点i+1只有左孩子,而没有右孩子;当2(i+1)n,结点i+1既没有左孩子也没有右孩子。,以上证明得到(2)和(3)成立。下面利用上面的结论证明(1)。对于任意一个结点i,若2in,则左孩子的编号为2i,反过来结点2i的双亲就是i,而 2i/2=i;若2i+1n,则右孩子的编号为2i+1,反过来结点2i+1的双亲就是i,而(2i+1)/2=i,由此可以得出(1)成立。,二叉树的存储结构 二叉树也可以采用两种存储方式:顺序存储结构和链式存储结构。1.顺序存储结构 这种存
20、储结构适用于完全二叉树。其存储形式为:用一组连续的存储单元按照完全二叉树的每个结点编号的顺序存放结点内容。下面是一棵二叉树及其相应的存储结构。,图 6-11,8,4 5 6 7,2 3,1,二叉树的顺序存储数据类型说明:,#define MAX_TREE_SIZE 100typedep Telemtype SqbiTreeMAX_TREE_SIZE/0号单元存放二叉树中结点总数SqbiTree bt;/bt是一维数组,(1)构造一棵有n个结点的完全二叉树SqbiTree*CreateBTree(TelemType item,int n)if(n=MAX_TREE_NODE_SIZE)n=MAX
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 二叉

链接地址:https://www.31ppt.com/p-6578830.html