数据结构第六章树和二叉树ppt课件.ppt
《数据结构第六章树和二叉树ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构第六章树和二叉树ppt课件.ppt(48页珍藏版)》请在三一办公上搜索。
1、数据结构第六章树和二叉树,本章内容6.1 树的概念与基本术语6.2 二叉树6.3 遍历二叉树6.4 线索二叉树6.5 树与森林6.6 赫夫曼树及其应用,6-3,6.1 树的概念与基本术语,树的定义(Tree)树是有n(n0)个结点的有限集合。如果 n=0,称为空树;如果 n0,称为非空树,对于非空树,有且仅有一个特定的称为根(Root)的节点(无直接前驱)如果 n1,则除根以外的其它结点划分为 m(m0)个互不相交的有限集 T1,T2,Tm,其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。每个结点都有唯一的直接前驱,但可能有多个后继树的举例其中:A是根;其余结点分成三个互不相交
2、的子集,T1=B,E,F,K,L;T2=C,G;T3=D,H,I,J,M,T1,T2,T3都是根A的子树,且本身也是一棵树,6-4,6.1 树的概念与基本术语,树的基本术语结点:包含一个数据元素及若干指向其子树的分支结点的度:结点拥有的子树数,或者说后继结点数叶结点:度为0的结点没有子树的结点分支结点:度不为0的结点包括根结点,也称为非终端结点。内部结点:除根外的结点孩子:结点的子树的根双亲:孩子的直接前驱,6-5,6.1 树的概念与基本术语,兄弟:同一双亲的孩子子孙:以某结点为根的树中的所有结点祖先:从根到该结点所经分支上的所有结点层次:根结点为第一层,其孩子为第二层,依此类推深度:树中结点
3、的最大层次森林:互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林,6-6,6.2 二叉树,二叉树(Binary Tree)每个结点最多有棵子树二叉树的子树有左右之分,6-7,6.2 二叉树,二叉树性质:在二叉树的第i层上至多有2i-1个结点证明:i=1,只有一个根节点,因此2i-1=20=1设第i-1层上,以上性质成立,即第i-1层至多有2(i-1)-1结点。由二叉树的定义可知,任何结点的度小于2,因此,第i层上的结点数最多为第i-1层上的两倍,即2*2i-2=2i-1证毕,6-8,6.2 二叉树,二叉树性质:深度为k的二叉树至多有2k-1个结点证明:由性质,已知第i层上结点数最多
4、为2i-1 k 2i-1=2k-1 i=1证毕,6-9,6.2 二叉树,二叉树性质:如果二叉树终端结点数为n0,度为2的结点数为n2,则n0=n2+1证明:设n1是度为1的结点,则总结点数n=n0+n1+n2设B为二叉树的分支数,除根结点外,每个结点有且只有一个分支,因此n=B+1每个分支皆由度为1或2的结点发出,B=n1+2n2n=B+1=(n1+2n2)+1=n0+n1+n2,因此 n0=n2+1证毕,6-10,6.2 二叉树,满二叉树:一个深度为k且有2k-1个结点的二叉树每层上的结点数都是最大数可以自上而下、自左至右连续编号,6-11,6.2 二叉树,完全二叉树:当且仅当每一个结点都与
5、深度相同的满二叉树中编号从1到n的结点一一对应的二叉树叶子结点只在最大两层上出现左子树深度与右子树深度相等或大,6-12,6.2 二叉树,完全二叉树(性质):具有n个结点的完全二叉树,其深度为 log2n+1证明:设k为深度,由二叉树性质,已知 2k-1-1 n 2k-1即 2k-1 n 2k即 k=log2n+1,6-13,完全二叉树(性质):在完全二叉树中,结点i的双亲为 i/2结点i的左孩子LCHILD(i)=2i结点i的右孩子RCHILD(i)=2i+1,6.2 二叉树,6-14,6.2 二叉树,二叉树的存储结构1.顺序存储结构2.链式存储结构顺序存储结构:用一个一维数组来存储二叉树的
6、各个结点C语言表示#define MAX_TREE_SIZE 100/二叉树的最大结点数typedef TElemType SqBiTreeMAX_TREE_SIZE;/0号单元存储根结点SqBiTree bt;显然,二叉树的结点必须按某种次序分别存入数组的各个单元,这种次序应能反映结点间的逻辑关系,否则二叉树上的各种基本运算在顺序存储结构上很难实现。对于完全二叉树来说,可以采用“以编号为地址”的方法,将编号为i的结点存入一维数组的第i个单元(下标为i-1)。,6-15,6.2 二叉树,完全二叉树的顺序表示例:对应的顺序存储结构:将编号为i的结点存入一维数组的第i个单元(下标为i-1),6-1
7、6,非完全二叉树的顺序表示例:对应的顺序存储结构:一维数组的21单元中只用上了7个.最坏情况下,一个深度为k且只有k个结点的单支树,却需要长度为2k-1的一维数组总结顺序存储结构适合存储完全二叉树对于非完全二叉树,采用链式存储结构更合适,6.2 二叉树,6-17,6.2 二叉树,二叉链表结点结构:通常每个结点中设置三个域,即值域、左指针域和右指针域,其结点结构如下:其中data表示值域,lchild和rchild分别表示左指针域和右指针域,用以分别存储指向左儿子结点和右儿子结点的指针。TElemType可以是任何相应的数据类型如int、float或char等。,typedef struct B
8、iTNode TElemType data;struct BiTNode*lchild,*rchild;BiTNode,*BITree;,6-18,6.2 二叉树,6-19,6.2 二叉树,三叉链表通常每个结点中设置四个域,即值域、左指针域、右指针域和双亲指针域,其结点结构如下:其中data表示值域,用于存储放入结点的数据,lchild和rchild分别表示左指针域和右指针域,用以分别存储指向左儿子结点和右儿子结点的指针,parent指向双亲结点。,6-20,6.3 遍历二叉树,遍历二叉树定义:二叉树的遍历(Traverse)是指按一定的规律访问二叉树的每个结点,且每个结点只被访问一次的过程。
9、对二叉树的遍历过程实际上是将非线性结构的二叉树中的结点排列成一个线性序列的过程。本节仅讨论二叉链表的遍历过程。设访问根结点用D表示,遍历左、右子树用L、R表示遍历分类:在任一结点上,有三种执行操作:访问结点本身,遍历该结点左子树,遍历该结点右子树。操作次序主要分为三种:左、根、右;也称为中序遍历、LDR;根、左、右;也称为先序遍历、DLR;左、右、根;也称为后序遍历、LRD。,6-21,6.3 遍历二叉树,三种遍历次序以递归的形式定义中序(InOrder)遍历:若树为空,执行空操作;否则依次执行:中序遍历左子树L;访问根结点D;中序遍历右子树R。先序(PreOrder)遍历:若树为空,执行空操
10、作;否则依次执行:访问根结点D;先序遍历左子树L;先序遍历右子树R。后序(PostOrder)遍历:若树为空,执行空操作;否则依次执行:后序遍历左子树L;后序遍历右子树R;访问根结点D。,6-22,6.3 遍历二叉树,二叉树遍历的实现template void PreOrder(BiTreeNode*t,void Visit(T item)/使用Visit(item)函数前序遍历二叉树t if(t!=NULL)Visit(t-data);PreOrder(t-Left(),Visit);PreOrder(t-Right(),Visit);为了通用性,把访问操作设计成前序遍历二叉树函数的一个函数
11、虚参 Visit()。,输出结果:ABDEGCF(第一个输出节点必为根节点),6-23,6.3 遍历二叉树,template void InOrder(BiTreeNode*t,void Visit(T item)/使用Visit(item)函数中序遍历二叉树tif(t!=NULL)InOrder(t-Left(),Visit);Visit(t-data);InOrder(t-Right(),Visit);,输出结果:DBGEAFC(先于根节点A输出的节点为左子树的节点后于根节点A输出的节点为右子树的节点),6-24,6.3 遍历二叉树,template void PostOrder(BiTr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第六 二叉 ppt 课件
链接地址:https://www.31ppt.com/p-5357808.html