计算机统考重难点班讲义(数据结构)-第二讲.ppt
《计算机统考重难点班讲义(数据结构)-第二讲.ppt》由会员分享,可在线阅读,更多相关《计算机统考重难点班讲义(数据结构)-第二讲.ppt(40页珍藏版)》请在三一办公上搜索。
1、数据结构重难点串讲,讲师:翔高教育一级培训师地点:上海,第四章 树与二叉树,重难点导航,二叉树遍历的递归算法(前序、中序和后序)、非递归算法(前序和中序,后序非递归遍历有其特殊性)。遍历是正章的基础和重点。树以及二叉树的存储结构二叉树的线索化。二叉树线索化的实质就是建立结点在相应序列中与其前驱和后继之间的联系树、森林和二叉树之间的转换哈夫曼树的定义、构造和求哈夫曼编码。,3,二叉树的基本运算(1)构造一棵二叉树 CreateBTree(BT)(2)清空以BT为根的二叉树 ClearBTree(BT)(3)判断二叉树是否为空 BTreeEmpty(BT)(4)获取给定结点的左孩子和右孩子 Lef
2、tChild(BT,node),RightChild(BT,node)(5)获取给定结点的双亲 Parent(BT,node)(6)遍历二叉树Traverse(BT),二叉树的性质二叉树具有下列5个重要的性质。【性质1】在二叉树的第i层上最多有2i-1个结点(i1)。【性质2】深度为K的二叉树最多有2K-1个结点(K1)。【性质3】对于任意一棵二叉树BT,如果度为0的结点个数为n0,度为2的结点个数为n2,则n0=n2+1。【性质4】具有n个结点的完全二叉树的深度为 log2n+1。其中,log2n 的结果是不大于log2n的最大整数。【性质5】对于有n个结点的完全二叉树中的所有结点按从上到下
3、,从左到右的顺序进行编号,则对任意一个结点i(1in),都有:(1)如果i=1,则结点i是这棵完全二叉树的根,没有双亲;否则其双亲结点的编号为 i/2。(2)如果2in,则结点i没有左孩子;否则其左孩子结点的编号为2i。(3)如果2i+1n,则结点i没有右孩子;否则其右孩子结点的编号为2i+1。,二叉树的存储结构二叉树也可以采用两种存储方式:顺序存储结构和链式存储结构。顺序存储结构这种存储结构适用于完全二叉树。其存储形式为:用一组连续的存储单元按照完全二叉树的每个结点编号的顺序存放结点内容。,链式存储结构在顺序存储结构中,利用编号表示元素的位置及元素之间孩子或双亲的关系,因此对于非完全二叉树,
4、需要将空缺的位置用特定的符号填补,若空缺结点较多,势必造成空间利用率的下降。在这种情况下,就应该考虑使用链式存储结构。常见的二叉树结点结构如下所示:,图 5-12,其中,Lchild和Rchild是分别指向该结点左孩子和右孩子的指针,item是数据元素的内容。在C语言中的类型定义为:typedef struct BTNodeEntryType item;struct BTNode*Lchild,*Rchlid;BTNode,*BTree;下面是一棵二叉树及相应的链式存储结构。,遍历二叉树二叉树是一种非线性的数据结构,在对它进行操作时,总是需要逐一对每个数据元素实施操作,这样就存在一个操作顺序问
5、题,由此提出了二叉树的遍历操作。所谓遍历二叉树就是按某种顺序访问二叉树中的每个结点一次且仅一次的过程。这里的访问可以是输出、比较、更新、查看元素内容等等各种操作。二叉树的遍历方式分为两大类:一类按根、左子树和右子树三个部分进行访问;另一类按层次访问。下面我们将分别进行讨论。,按根、左子树和右子树三部分进行遍历遍历二叉树的顺序存在下面6种可能:TLR(根左右),TRL(根右左)LTR(左根右),RTL(右根左)LRT(左右根),RLT(右左根)其中,TRL、RTL和RLT三种顺序在左右子树之间均是先右子树后左子树,这与人们先左后右的习惯不同,因此,往往不予采用。余下的三种顺序TLR、LTR和LR
6、T根据根访问的位置不同分别被称为先序遍历、中序遍历和后序遍历。,(1)先序遍历若二叉树为空,则结束遍历操作;否则访问根结点;先序遍历左子树;先序遍历右子树。(2)中序遍历若二叉树为空,则结束遍历操作;否则中序遍历左子树;访问根结点;中序遍历右子树。,(3)后序遍历若二叉树为空,则结束遍历操作;否则后序遍历左子树;后序遍历右子树;访问根结点。下面是一棵二叉树及其经过三种遍历得到的相应序列。,下面我们再给出两种遍历二叉树的方法:1)对一棵二叉树中序遍历时,若我们将二叉树严格地按左子树的所有结点位于根结点的左侧,右子树的所有结点位于根右侧的形式绘制,就可以对每个结点做一条垂线,映射到下面的水平线上,
7、由此得到的顺序就是该二叉树的中序遍历序列。,在二叉树的层次遍历算法中,应使用一个队列结构完成这项操作。所谓记录访问结点就是入队操作;而取出记录的结点就是出队操作。这样一来,我们的算法就可以描述成下列形式:(1)访问根结点,并将根结点入队;(2)当队列不空时,重复下列操作:从队列退出一个结点;若其有左孩子,则访问左孩子,并将其左孩子入队若其有右孩子,则访问右孩子,并将其右孩子入队,计算一棵二叉树的叶子结点数目这个操作可以使用三种遍历顺序中的任何一种,只是需要将访问操作变成判断该结点是否为叶子结点,如果是叶子结点将累加器加1即可。下面这个算法是利用中序遍历实现的。,【算法5-13】void Lea
8、f(BTree BT,int*count)if(BT)Leaf(BT-child,/计算右子树的叶子结点个数,求二叉树的高度这个操作使用后序遍历比较符合人们求解二叉树高度的思维方式。首先分别求出左右子树的高度,在此基础上得出该棵树的高度,即左右子树较大的高度值加1。int hight(BTree BT)/h1和h2分别是以BT为根的左右子树的高度 if(BT=NULL)return 0;else h1=hight(BT-lchild);h2=hight(BT-right);return maxh1,h2+1;,树、森林与二叉树的转换树、森林转换成二叉树将一棵树转换成二叉树的方法:将一棵树转换成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 统考 难点 讲义 数据结构 第二
链接地址:https://www.31ppt.com/p-6023985.html