(8.1)--数据结构第6章树和二叉树.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《(8.1)--数据结构第6章树和二叉树.pdf》由会员分享,可在线阅读,更多相关《(8.1)--数据结构第6章树和二叉树.pdf(73页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章 树和二叉树章 树和二叉树树型结构树型结构是一类重要的是一类重要的非线性非线性结构,结点之间有结构,结点之间有分支分支,并且具有,并且具有层次层次关系的结构,类似于自然界中的树。关系的结构,类似于自然界中的树。实例实例现实世界:家谱、行政组织机构现实世界:家谱、行政组织机构特点特点一个前驱多个后继一个前驱多个后继提 纲提 纲 树的定义和基本术语树的定义和基本术语 二叉树和二叉树的性质二叉树和二叉树的性质 二叉树的存储结构二叉树的存储结构 遍历二叉树遍历二叉树 线索二叉树线索二叉树 树的存储树的存储 树的转换与遍历树的转换与遍历 赫夫曼树赫夫曼树 赫夫曼编码赫夫曼编码树的定义和基本术语树
2、的定义和基本术语树(树(Tree)是是n(n=0)个结点的有限集。在任意一棵非空树中:有且仅有一个特定的称为)个结点的有限集。在任意一棵非空树中:有且仅有一个特定的称为根根的结点的结点(Root);当;当n1时,其余结点可分为时,其余结点可分为m(m0)个)个互不相交的有限集互不相交的有限集T1,T2,.,Tm,其中每一个集合本身,其中每一个集合本身又是一棵树又是一棵树,并且称为根的子树。,并且称为根的子树。定义定义ADT Tree数据对象:数据对象:D是具有相同特性的数据元素的集合数据关系:基本操作:是具有相同特性的数据元素的集合数据关系:基本操作:TreeDepth(T);Parent(T
3、,cue_e);TraverseTree(T,Visit();ADT Tree;基本术语基本术语结点结点:包含一个数据元素及若干指向其子树的分支。:包含一个数据元素及若干指向其子树的分支。结点的度结点的度:结点拥有的子树数。:结点拥有的子树数。叶子或终端结点叶子或终端结点:度为0的结点。:度为0的结点。非终端结点或分支结点非终端结点或分支结点:度不为0的结点。:度不为0的结点。树的度树的度:树内各结点的度的:树内各结点的度的最大值最大值。孩子和双亲孩子和双亲:结点:结点子树的根子树的根称为该结点的孩子;对应地,该结点称为孩子的双亲结点。称为该结点的孩子;对应地,该结点称为孩子的双亲结点。兄弟兄
4、弟:同一个双亲的孩子之间互称兄弟。:同一个双亲的孩子之间互称兄弟。祖先和子孙祖先和子孙:结点的祖先是从根到该结点所经分支上的所有结点;反之,以某结点为根的子树中的任一结点都称为该结点的子孙。:结点的祖先是从根到该结点所经分支上的所有结点;反之,以某结点为根的子树中的任一结点都称为该结点的子孙。层次层次:结点的层次:结点的层次从根开始定义从根开始定义,根为第一层,根的孩子为第二层,依次类推。,根为第一层,根的孩子为第二层,依次类推。深度深度:树中结点的:树中结点的最大层次最大层次。堂兄弟堂兄弟:其双亲在同一层的结点互为堂兄弟。:其双亲在同一层的结点互为堂兄弟。森林森林:是:是m(m=0)棵互不相
5、交的)棵互不相交的树的集合树的集合。有序树和无序树有序树和无序树:树中结点的各子树看成从左至右是有次序的(不能互换),则称该树为有序树;否则该树为无序树。:树中结点的各子树看成从左至右是有次序的(不能互换),则称该树为有序树;否则该树为无序树。提 纲提 纲 树的定义和基本术语树的定义和基本术语 二叉树和二叉树的性质二叉树和二叉树的性质 二叉树的存储结构二叉树的存储结构 遍历二叉树遍历二叉树 线索二叉树线索二叉树 树的存储树的存储 树的转换与遍历树的转换与遍历 赫夫曼树赫夫曼树 赫夫曼编码赫夫曼编码二叉树二叉树二叉树在树结构的应用中起着非常重要的作用。二叉树在树结构的应用中起着非常重要的作用。为
6、什么?为什么?二叉树二叉树存储容易实现,操作算法简单!存储容易实现,操作算法简单!树,森林树,森林以某种方式转换以某种方式转换注:注:有效控制了树和森林的存储结构及其运算中存在的有效控制了树和森林的存储结构及其运算中存在的复杂性复杂性!二叉树的定义二叉树的定义每个结点至多只有每个结点至多只有二棵子树二棵子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。,并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的性质二叉树的性质性质性质1 在二叉树的第在二叉树的第i层至多有层至多有2i-1个结点(个结点(i1)。)。性质性质2 深度为深度为k的二叉树至多有的二叉树至多有2k-1个结点(个结
7、点(k1)。)。证明证明:20+21+.+2k-1=2k-1性质性质3 对任何一棵二叉树对任何一棵二叉树T,如果其终端结点数为,如果其终端结点数为n0,度为,度为2的结点数为的结点数为n2,则,则n0=n2+1。证明证明:设:设n1为度为为度为1的结点数的结点数n=n0+n1+n2(6-1)设)设B为分支数,有为分支数,有n=B+1;又有分支由;又有分支由1、2度结点射出,度结点射出,B=n1+2n2得,得,n=n1+2n2+1(6-2)由(由(6-1)()(6-2)得)得n0=n2+1。两种特殊形态的二叉树两种特殊形态的二叉树满二叉树和完全二叉树满二叉树和完全二叉树满二叉树满二叉树:一棵深度
8、为:一棵深度为k有有2k-1个结点的二叉树。个结点的二叉树。完全二叉树完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点编号从1至n的结点一一对应时,称为完全二叉树。一一对应时,称为完全二叉树。完全二叉树特点完全二叉树特点:(:(1)叶子结点只可能出现在)叶子结点只可能出现在层次最大层次最大的两层上;(的两层上;(2)对任一结点,若其右分支下的子孙的最大层次为)对任一结点,若其右分支下的子孙的最大层次为l,则其左分支下的子孙的最大层次为,则其左分支下的子孙的最大
9、层次为l或或l+1。性质性质4 具有具有n个结点的完全二叉树的深度为个结点的完全二叉树的深度为log2n+1。证明证明:设深度为:设深度为k,2k-1-1 n 2k-1 2k-1 n 2k k-1 log2n 1,则其双亲则其双亲PARENT(i)是是结点结点i/2。(。(2)如果)如果2in,则结点,则结点i无左孩子(结点无左孩子(结点i为叶子结点);否则,其左孩子为叶子结点);否则,其左孩子LCHILD(i)是)是结点结点2i。(。(3)如果)如果2i+1n,则结点,则结点i无右孩子;否则,其右孩子无右孩子;否则,其右孩子RCHILD(i)是结点)是结点2i+1证明证明:i=1时,是根结点
10、,左右孩子的编号是时,是根结点,左右孩子的编号是2,3,两条性质是成立的。假设,两条性质是成立的。假设i=k时成立,时成立,i左孩子编号是左孩子编号是2k,右孩子是,右孩子是2k+1。那么。那么i=k+1时就有两种情况。时就有两种情况。1.k是某层最后一个结点,那么,编号是某层最后一个结点,那么,编号k+1的结点是下层的第的结点是下层的第1个结点,证明如图所示。个结点,证明如图所示。2.k+1是是k同层的下一个结点,基于归纳假设和编号原则,同层的下一个结点,基于归纳假设和编号原则,k+1的左孩子编号是的左孩子编号是2k+2=2(k+1),右孩子编号是),右孩子编号是2k+3=2(k+1)+1,
11、两条性质成立。,两条性质成立。提提 纲纲 树的定义和基本术语树的定义和基本术语 二叉树和二叉树的性质二叉树和二叉树的性质 二叉树的存储结构二叉树的存储结构 遍历二叉树遍历二叉树 线索二叉树线索二叉树 树的存储树的存储 树的转换与遍历树的转换与遍历 赫夫曼树赫夫曼树 赫夫曼编码赫夫曼编码二叉树的存储结构二叉树的存储结构顺序存储结构顺序存储结构用一组用一组连续的存储单元连续的存储单元存储二叉树的数据元素。因此,存储二叉树的数据元素。因此,必须把二叉树的所有结点必须把二叉树的所有结点安排成为一个恰当的序列安排成为一个恰当的序列,结点在,结点在这个序列中的这个序列中的相互位置能反映出结点之间的逻辑关系
12、相互位置能反映出结点之间的逻辑关系(用相(用相对位置描述双亲和左右孩子的关系)。对位置描述双亲和左右孩子的关系)。例:完全二叉树的顺序存储结构例:完全二叉树的顺序存储结构完全二叉树结点编号完全二叉树结点编号(1n),按编号次序依次把对应按编号次序依次把对应结点存入下标结点存入下标1n,依二叉树性质依二叉树性质5,暗示结点之间的关系暗示结点之间的关系注:注:这种结构较适合存储完全二叉树这种结构较适合存储完全二叉树。可能对存储空间造成可能对存储空间造成极大的浪费极大的浪费,在最坏的情况下在最坏的情况下,一个深度为一个深度为H且只有且只有H个结个结点的右单支树点的右单支树,需要需要2h-1个结点存储
13、空间个结点存储空间。而且而且,若经常需若经常需要要插入与删除插入与删除树中结点时树中结点时,顺序存储方式不是很好顺序存储方式不是很好。7链式存储结构链式存储结构typedef struct BiTNodeTElemTypedata;struct BiTNode*lchild,*rchild;BiTNode,*BiTree;lchilddatarchildlchilddata parent rchild含含2个指针域的结点个指针域的结点含含3个指针域的结点个指针域的结点例:例:链式存储结构示意图链式存储结构示意图注:注:在含有在含有n n个结点的二叉链表中个结点的二叉链表中有有n+n+1 1个空
14、链域个空链域。例:三叉链表例:三叉链表 静态二叉链表静态二叉链表有时也可用有时也可用数组的下标来模拟指针数组的下标来模拟指针,即开辟三个一维数组即开辟三个一维数组Data,lchild,rchild 分别存储结点的元素及其左分别存储结点的元素及其左,右指针域右指针域。#define MAX 100ElemType data MAX;int root,lchildMAX,rchildMAX;提提 纲纲 树的定义和基本术语树的定义和基本术语 二叉树和二叉树的性质二叉树和二叉树的性质 二叉树的存储结构二叉树的存储结构 遍历二叉树遍历二叉树 线索二叉树线索二叉树 树的存储树的存储 树的转换与遍历树的转
15、换与遍历 赫夫曼树赫夫曼树 赫夫曼编码赫夫曼编码遍历二叉树遍历二叉树遍历二叉树遍历二叉树在二叉树的一些应用中在二叉树的一些应用中,常常要求在树中常常要求在树中查找查找具有某种具有某种特征的结点特征的结点,或者对树中或者对树中全部结点全部结点逐一进行某种逐一进行某种处理处理。这就引入了这就引入了遍历二叉树遍历二叉树的问题的问题,即如何即如何按某条搜索路径按某条搜索路径巡访树中的每一个结点巡访树中的每一个结点,使得每一个结点均被访问一次使得每一个结点均被访问一次,而而且仅被访问一次且仅被访问一次。遍历对线性结构是遍历对线性结构是容易解决容易解决的!的!二叉树是二叉树是非线性的!非线性的!遍历二叉树
16、:遍历二叉树:按某条搜索路径(策略)巡访每个结点,按某条搜索路径(策略)巡访每个结点,使得每个结点均被访问一次,而且仅一次。使得每个结点均被访问一次,而且仅一次。原问题:原问题:遍历二叉树遍历二叉树递归分解递归分解访问根访问根遍历左子树遍历左子树遍历右子树遍历右子树 三种遍历策略三种遍历策略(递归递归)若二叉树为空若二叉树为空,则空操作;则空操作;先序:先序:根根,先序遍历左子树先序遍历左子树,先序遍历右子树先序遍历右子树中序:中序遍历左子树中序:中序遍历左子树,根根,中序遍历右子树中序遍历右子树后序:后序遍历左子树后序:后序遍历左子树,后序遍历右子树后序遍历右子树,根根例:访问序列例:访问序
17、列先序:先序:ABDEGCF中序:中序:DBGEAFC后序:后序:DGEBFCA例:例:已知二叉树的先序和中序序列已知二叉树的先序和中序序列,画出该二叉树画出该二叉树原问题:原问题:画二叉树画二叉树递归分解:递归分解:画根画根画左子树画左子树画右子树画右子树Status PreOrderTraverse(BiTree T,Status(*visit)(TelemType e)if(T)if(Visit(T-data)if(PreOrderTraverse(T-lchild,Visit)if(PreOrderTraverse(T-rchild,Visit)return OK;return ERR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8.1 数据结构 二叉
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内