第5章 树与二叉树.ppt
《第5章 树与二叉树.ppt》由会员分享,可在线阅读,更多相关《第5章 树与二叉树.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 树与二叉树树与二叉树5.1 树的基本概念树的基本概念5.2 二叉树及其基本概念二叉树及其基本概念5.3二叉树的存储结构二叉树的存储结构5.4 遍历二叉树遍历二叉树*5.5 树的存储结构树的存储结构5.6 森林与二叉树的转换森林与二叉树的转换5.7 赫夫曼树及其应用赫夫曼树及其应用 第5章 树与二叉数 第 页 2007-7-29第第5章章 树与二叉树树与二叉树 5.1树的基本概念树的基本概念 树树(tree)是一种简单的是一种简单的非线性结构非线性结构。在树。在树这种数据结构中,所有数据元素之间的关系这种数据结构中,所有数据元素之间的关系具有明显的层次特性,具有明显的层次特性,如图如
2、图5-1所示。所示。在树的图形表示中,通常用一个圆圈表示在树的图形表示中,通常用一个圆圈表示一个结点,结点的名字写在圆圈内或是圆圈一个结点,结点的名字写在圆圈内或是圆圈旁边,以区别于其他的结点并规定在用直线旁边,以区别于其他的结点并规定在用直线连起来的两端结点中,总是认为上端结点是连起来的两端结点中,总是认为上端结点是前件,下端结点是后件。前件,下端结点是后件。树这种数据结构在客观世界中大量存在,例这种数据结构在客观世界中大量存在,例如行政组织机构、家谱等都可用树形象表示。如行政组织机构、家谱等都可用树形象表示。第1层 第2层 第3层 第4层 图图5-15-1 树的图形表示树的图形表示 ACD
3、BEFGHIJMKL第5章 树与二叉数 第 页 2007-7-29 1.1.树的定义树的定义 树(树(TreeTree)是)是n(n0)n(n0)个结点的有限集个结点的有限集T T。当。当n=0n=0时,称为空树;时,称为空树;当当 n n0 0 时时 ,该集合满足如下条件:,该集合满足如下条件:有且仅有一个特定的称为根(有且仅有一个特定的称为根(rootroot)的结点;的结点;其其余余的的结结点点可可分分为为m m(m m 0 0)个个互互不不相相交交的的子子集集T T1 1,T T2 2,.,T Tm m,其其中中每每个个子子集集本本身身又又是是一一棵棵树树,并并称其为根的子树(称其为根
4、的子树(SubTreeSubTree)。)。例如,图例如,图5-15-1是一棵具有是一棵具有1313个结点的树,其中个结点的树,其中 A A是根,是根,余下的余下的1212个结点分成个结点分成3 3个互不相交的子集:个互不相交的子集:T T1 1=B=B,E E,F F,G G,K K,L L,T T2 2=C=C,H H,T T3 3=D=D,I I,J J,M M。T T1 1、T T2 2 、T T3 3都是树,而且是根结点都是树,而且是根结点A A的子树。的子树。第5章 树与二叉数 第 页 2007-7-29 2.2.树的基本术语树的基本术语 1 1)结点的度:)结点的度:一个结点的子
5、树数称为该结一个结点的子树数称为该结点的度点的度 。2 2)树的度:)树的度:树的所有结点中的最大的度称树的所有结点中的最大的度称为树的度。为树的度。3 3)叶子:)叶子:树中度为树中度为0 0的结点称为叶子结点或的结点称为叶子结点或终端结点,简称叶子终端结点,简称叶子 。4 4)分支结点:)分支结点:树中度不为树中度不为0 0的结点称为分支的结点称为分支结点或非终端结点。结点或非终端结点。5 5)双亲和孩子:)双亲和孩子:结点的子树的根称为该结结点的子树的根称为该结点的孩子点的孩子,相应地,该结点称为孩子的双亲。相应地,该结点称为孩子的双亲。第5章 树与二叉数 第 页 2007-7-29 6
6、 6)结点的层:)结点的层:规定树的根结点的层(规定树的根结点的层(LevelLevel)为,为,其余任一结点的层等于它的双亲的层加。其余任一结点的层等于它的双亲的层加。7 7)树的深度:)树的深度:树中各结点的层的最大值称为树的树中各结点的层的最大值称为树的深度(深度(DepthDepth)或高度。或高度。)兄弟和堂兄弟:)兄弟和堂兄弟:同一双亲的孩子之间互称为兄同一双亲的孩子之间互称为兄弟(弟(SiblingSibling)。)。其双亲在同一层的结点互为堂兄弟。其双亲在同一层的结点互为堂兄弟。9 9)祖先和子孙:)祖先和子孙:一个结点的祖先是指从该结点到一个结点的祖先是指从该结点到树的根所
7、经分支上的所有结点。一个结点的子树上的树的根所经分支上的所有结点。一个结点的子树上的所有结点称为该结点的子孙。所有结点称为该结点的子孙。1010)有序树和无序树:)有序树和无序树:如果树中任一结点的各棵子如果树中任一结点的各棵子树规定从左至右是有次序的,即不能互换位置,则称树规定从左至右是有次序的,即不能互换位置,则称该树为有序树,否则称为无序树(如图该树为有序树,否则称为无序树(如图5-35-3所示)。所示)。第5章 树与二叉数 第 页 2007-7-29 1111)森林:)森林:n n(n0n0)棵互不相交的树的集合称为棵互不相交的树的集合称为森林森林 。删去一棵树的根结点便得到一个森林。
8、删去一棵树的根结点便得到一个森林 。图5-3 两棵不同的有序树ABCDBDAC5.2 5.2 二叉树及其基本性质二叉树及其基本性质 1.1.二叉树的定义二叉树的定义第5章 树与二叉数 第 页 2007-7-29 二叉树是二叉树是n n(n0n0)个结点的有限集,它或者是空个结点的有限集,它或者是空集(集(n=0n=0),),或者是由一个根结点和两棵互不相交或者是由一个根结点和两棵互不相交且分别称为根的左子树和右子树的二叉树组成。这是且分别称为根的左子树和右子树的二叉树组成。这是二叉树的递归定义。二叉树的递归定义。二叉树共有种基本形态,如图二叉树共有种基本形态,如图5-45-4所示所示 (a)(
9、b)(c)(d)(e)图图5-45-4 二叉树的五种基本形态二叉树的五种基本形态 (a)空二叉树 (b)仅有根结点的二叉树 (c)右子树为空的二叉树(d)左子树为空的二叉树 (e)左、右子树非空的二叉树AABABABC第5章 树与二叉数 第 页 2007-7-292.2.二叉树的基本性质二叉树的基本性质性质性质:在二叉树的第在二叉树的第i层上层上,最多有最多有2i-1个结点(个结点(i1)性质性质:深度为深度为k的二叉树最多有的二叉树最多有2k-1个结点。个结点。显然将第显然将第1至第至第i层的最多结点数相加,即可得到此层的最多结点数相加,即可得到此结果结果20+21+2k-1=2k-1性质:
10、性质:在任意一棵二叉树中,若度为在任意一棵二叉树中,若度为0的结点(即叶的结点(即叶子结点)数为子结点)数为n0,度为度为2的结点数为的结点数为n2,则,则n0=n2+1。设设n1为二叉树中度为为二叉树中度为1的结点数的结点数,n为二叉树的总结为二叉树的总结点数,因为点数,因为n=n1+2n2+1=n0+n1+n2 可得可得n0=n2+1第5章 树与二叉数 第 页 2007-7-29满二叉树满二叉树:一棵深度为一棵深度为 k 且具有且具有 2k-1 个结点的二叉个结点的二叉数数。(对满二叉树的结点进行顺序编号,约定编号。(对满二叉树的结点进行顺序编号,约定编号从根结点起,自上而下,同层的结点从
11、左至右)从根结点起,自上而下,同层的结点从左至右)完全二叉树完全二叉树:深度为深度为K,有,有n个结点的二叉树,当且个结点的二叉树,当且仅当其每一个结点都与深度为仅当其每一个结点都与深度为K的满二叉树中编号从的满二叉树中编号从1至至n的结点一一对应时。(完全二叉树除最后一层的结点一一对应时。(完全二叉树除最后一层外,每一层上的结点数都达到最大值外,每一层上的结点数都达到最大值,在最后一层,在最后一层上可能缺少右边的若干结点。显然满二叉树是完全上可能缺少右边的若干结点。显然满二叉树是完全二叉树二叉树)。)。非完全二叉树:非完全二叉树:除完全二叉树外的其它二叉树除完全二叉树外的其它二叉树。第5章
12、树与二叉数 第 页 2007-7-29在图在图5-5中,中,(a)为满而叉树为满而叉树(b)为完全二叉树为完全二叉树(c)为为非完全二叉树。非完全二叉树。(a)满二叉树 (b)完全二叉树 (c)非完全二叉树 图图5-5 5-5 特殊形态的二叉树特殊形态的二叉树123456123568741234567第5章 树与二叉数 第 页 2007-7-29性质:性质:具有具有 n n个结点的完全二叉树的深度为个结点的完全二叉树的深度为 log2n +1+1。其中其中 log2n 表示表示不超过不超过log2n的的最大整数。最大整数。事事实实上上,设设完完全全二二叉叉树树的的深深度度为为k k,由由完完全
13、全二二叉叉树树的的定定义义知知,它它的的k-1k-1层层,是是深深度度为为 k-1k-1的的满满二二叉叉树树;由由性性质质2 2知知,一一共共有有2k-1-1个个结结点点;又又因因第第k k层层上上还还有有若若干干结结点点,所所以以该该完完全全二二叉叉树树总总的的结结点点数数n n2 2k-1-1 1,另另外外,总总结结点点数数n2n2k-1-1,从从而而可可得得2 2k-111 n n 22k11,整整理理得得到到 2 2k-1 n n 22k 。对对此此不不等等式式的的各各项项,同同取取以以2 2为为底底的的对对数数后后有有k-1k-1log2nk k 成成立,即立,即k-1=k-1=lo
14、g2n 或或k=log2n +1+1。采用顺序编号的完全二叉树还具有以下性质:采用顺序编号的完全二叉树还具有以下性质:第5章 树与二叉数 第 页 2007-7-29 若若i=1i=1,则则结结点点i i是是二二叉叉树树的的根根,无无双双亲亲;如如果果i i1 1,则该结点的父结点编号为则该结点的父结点编号为 i/2i/2。若若2in2in,则则结结点点i i的的左左孩孩子子是是结结点点2i2i;若若2i2in n,则结点则结点i i无左孩子。无左孩子。若若2i+1n 2i+1n,则则结结点点i i的的右右孩孩子子是是结结点点2i+12i+1;若若2i+12i+1n n,则结点则结点i i无右孩
15、子。无右孩子。根据完全二叉树的这些性质,很容易确定任一根据完全二叉树的这些性质,很容易确定任一结点的双亲、左孩子和右孩子的位置。结点的双亲、左孩子和右孩子的位置。5.35.3二叉树的存储结构二叉树的存储结构 第5章 树与二叉数 第 页 2007-7-291.1.顺序存储结构顺序存储结构 该方法是把二叉树的所有结点,按从上至下、从左该方法是把二叉树的所有结点,按从上至下、从左至右的顺序,存储在一块地址连续的存储单元中。通至右的顺序,存储在一块地址连续的存储单元中。通常,用一维数组作为存储结构。常,用一维数组作为存储结构。0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8
16、9 10 图图5-65-6 完全二叉树的顺序存储结构完全二叉树的顺序存储结构 图图5-75-7 非完全二叉树的顺序存储结构非完全二叉树的顺序存储结构ABCDEHIFG/A B C D E F G H IABCDEF/A B C D E F第5章 树与二叉数 第 页 2007-7-29 对于一般的二叉树来说,为了能够用结点在对于一般的二叉树来说,为了能够用结点在向量中的相对位置来表示结点之间的逻辑关系,向量中的相对位置来表示结点之间的逻辑关系,也必须按完全二叉树的形式来存储树中的结点。也必须按完全二叉树的形式来存储树中的结点。例如,图例如,图5-7所示所示。容易看出,一般的二叉树用顺序存储结构容
17、容易看出,一般的二叉树用顺序存储结构容易造成存储空间的浪费。在最坏的情况下,一易造成存储空间的浪费。在最坏的情况下,一个深度为个深度为k且只有且只有k个结点的右单枝树需要个结点的右单枝树需要2k-1个结点的存储空间,而其中只有个结点的存储空间,而其中只有k个位置上存个位置上存入了结点,空间利用率仅为入了结点,空间利用率仅为k/(2k-1)。第5章 树与二叉数 第 页 2007-7-29abdefc右单支二叉树 为克服顺序存储可能浪费存储空间的缺点,为克服顺序存储可能浪费存储空间的缺点,二叉树采用链式存储结构。二叉树采用链式存储结构。第5章 树与二叉数 第 页 2007-7-29 .链式存储结构
18、链式存储结构 二叉链表二叉链表结点的结构如图结点的结构如图5-8所示。其中所示。其中data域存储结点的值,域存储结点的值,lchild 域及域及rchild域域分别存储指向左孩子和右孩子的指针。若不分别存储指向左孩子和右孩子的指针。若不存在左孩子或右孩子,则其相应的指针域为存在左孩子或右孩子,则其相应的指针域为空指针。此外,为每棵二叉树设立一个指向空指针。此外,为每棵二叉树设立一个指向根结点的指针根结点的指针root。图图5-8 二叉链表结点的二叉链表结点的结构 lchild data rchild若二叉树为空,则若二叉树为空,则rootroot为空指针为空指针。第5章 树与二叉数 第 页
19、2007-7-29 如果需要经常寻找二叉树中某个结点的双亲,如果需要经常寻找二叉树中某个结点的双亲,可以在结点结构中增加一个指向双亲的指针域可以在结点结构中增加一个指向双亲的指针域parentparent。通常,将每个结点带通常,将每个结点带3 3个指针域个指针域lchildlchild、rchildrchild、parentparent的链表称为二叉树的的链表称为二叉树的三叉链表三叉链表。三叉三叉链链表表结结点点结结构如构如图图5-105-10所示。所示。图图5-10 5-10 三叉链表的结点结构三叉链表的结点结构lchild data parent rchild 例如,图例如,图5-75-
20、7所示二叉树的二叉链表表示可所示二叉树的二叉链表表示可见图见图 5-9,三叉链表表示可见图三叉链表表示可见图5-11二叉链二叉链表是二叉树最常用的存储结构,表是二叉树最常用的存储结构,第5章 树与二叉数 第 页 2007-7-29 root root图图5-95-9二叉树二叉树(图图5-75-7)的二叉链表的二叉链表 图图5-11二叉树二叉树(图图5-75-7)的三叉链表的三叉链表 A C E B D F A B C D E F 下面讨论的二叉树的遍历都是以二叉链表下面讨论的二叉树的遍历都是以二叉链表作为二叉树的存储结构。作为二叉树的存储结构。第5章 树与二叉数 第 页 2007-7-29 二
21、叉链表是二叉树最常用的存储结构,下面二叉链表是二叉树最常用的存储结构,下面讨论的二叉树的遍历都是以二叉链表作为二叉讨论的二叉树的遍历都是以二叉链表作为二叉树的存储结构。二叉链表中结点结构类型定义树的存储结构。二叉链表中结点结构类型定义如下:如下:*typedef char TelemType;/*TelemType为字符型,若需要可重新定义为字符型,若需要可重新定义*/typedef struct BiTNode TelemType data;struct BiTNode*lchild,*rchild;BiTNode,*BiTree;第5章 树与二叉数 第 页 2007-7-29 如何按某条搜
22、索路径访问树中的每一个结点,使得每一个结点均被访问一次,而且仅被访问一次。遍历对线性结构是容易解决的,而二叉树是非线性的,每个结点都可能有两个直接后件结点,这将导,每个结点都可能有两个直接后件结点,这将导致存在多条遍历路线。致存在多条遍历路线。因而需要寻找一种规律,以便使二叉树上的结点能排列在一个线性队列上,从而便于遍历。bca(根结点)(右子树)(左子树)由二叉树的递归定义,二叉树的三个基本组成单元是:根结点、左子树和右子树。5.45.4遍历二叉树遍历二叉树 第5章 树与二叉数 第 页 2007-7-29假如以L、N、R分别表示遍历左子树、遍历根结点和遍历右子树,遍历整个二叉树则有NLR、L
23、NR、LRN、NRL、RNL、RLN六种遍历方案。若规定先左后右,则只有前三种情况,分别规定为:NLR先(根)序遍历,LNR中(根)序遍历,LRN后(根)序遍历。1、先序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。2、中序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;第5章 树与二叉数 第 页 2007-7-29(3)中序遍历右子树。3、后序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。第5章 树与二叉数 第 页
24、 2007-7-29例如图(1)所示的二叉树表达式(a+b*(c-d)-e/f)若先序遍历此二叉树,按访问结点的先后次序将结点排列起来,其先序序列为:-+a*b-cd/ef 按中序遍历,其中序序列为:a+b*c-d-e/f按后序遍历,其后序序列为:abcd-*+ef/-*a/b-dcfe第5章 树与二叉数 第 页 2007-7-29练习如图所示二叉树的中序遍历序列是()。lAabcdgefBdfebagcCdbaefcgDdefbagc第5章 树与二叉数 第 页 2007-7-29补充 根据遍历序列构造二叉树 由一棵给定的二叉树可以获得三种遍历序列,同样,也可以由这些遍历序列来重新构造二叉树。
25、单用一个遍历序列是无法构造二叉树的,因为无法从遍历序列中区分二叉树的左、右子树。但利用中序遍历序列,并结合先序遍历序列或后序遍历序列就能重新构造二叉树。第5章 树与二叉数 第 页 2007-7-29 根据二叉树的遍历定义,先序遍历序列和中序遍历序列的结点分布特点是:l先序遍历序列:l中序遍历序列:第5章 树与二叉数 第 页 2007-7-29 可以得到二叉树的构造步骤:1)从先序遍历序列中取出第一个结点,该结点一定是二叉树的根。然后在中序遍历序列中找到根结点,根结点前面的结点序列就是左子树的中序遍历序列,根结点后面的结点序列就是右子树的中序遍历序列。2)对根的左子树先序遍历序列和中序遍历序列及
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 树与二叉树 二叉
限制150内