数据结构-树课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构-树课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件
- 资源描述:
-
1、跳转到第一页 第五章第五章 树树本章内容:本章内容:*树的定义和基本操作;*二叉树的定义及遍历、存储结构;*树的应用;重点:重点:*树的定义 *二叉树的定义及遍历序列跳转到第一页 内内 容容5.1 树的定义和基本术语5.2 二叉树的定义及存储结构5.3 二叉树的遍历5.4 树的存储5.5 树的应用跳转到第一页 5.1 5.1 树的定义和基本术语树的定义和基本术语 树是由n个结点构成的有限集合。当n=0时,称为空树。在一棵非空树中(n0)中,有且仅有一个特定的结点,称根的结点;其余结点可分为m个(m0)互不相交的集合T1,T2Tm,其中,每一个集合本身又是一棵树,且称为根的子树。跳转到第一页 特
2、点:特点:树中至少有一个结点根,它没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点;树中各子树是互不相交的集合,树中所有结点可以有零个或多个后继结点。有限集合T1,T2Tm应该“互不相交”,即任意 两个集合不能有相重的结点。树的各个结点有不同层次关系,这种关系通常用图形表示,但与自然界的树木相反,习惯上将整棵树的根画在最上层,如图5.1所示跳转到第一页ABCDEFGHIJKLM有子树的树根子树A只有根结点的树图5.1跳转到第一页v结点(node)表示树中的元素,包括数据项及若干指向其子树的分支v结点的度(degree)结点拥有的子树个数v叶子(leaf)度为0的结点v孩子(child)
3、结点子树的根称为该结点的孩子v双亲(parents)孩子结点的上层结点叫该结点的v兄弟(sibling)同一双亲的孩子v树的度一棵树中最大的结点度数跳转到第一页结点的层次(level)从根结点算起,根为第一层,它的孩子为第二层深度(depth)树中结点的最大层次数森林(forest)m(m0)棵互不相交的树的集合有序树 树中结点的各子树从左到右是有次序的,否则为无序树。例:例:如下图5.2所示,回答问题:跳转到第一页ABCDEFGHIJKLM结点A的度:3结点B的度:2结点M的度:0树的度:3结点A的孩子:B,C,D结点B的孩子:E,F结点A的层次:1结点M的层次:4叶子:K,L,F,G,M,
4、I,J结点I的双亲:D结点L的双亲:E结点B,C,D为兄弟结点K,L为兄弟结点F,G为堂兄弟结点A是结点F,G的祖先树的深度:4图5.2跳转到第一页1、直观表示法:图5.3表示法 2、文氏图法:hbacgdefijijdfghabe跳转到第一页 3、嵌套括号法 4、凹入表示法a(b(d,e(i,j),c(g,h)abdeijfcgh跳转到第一页跳转到第一页5.2 5.2 二叉树二叉树 一个二叉树是n个结点的有限集合(n0),此集合或者是空集(n=0),或者是由一个根结点及两棵互不相交的、分别称为左子树和右子树的二叉树组成。由上述定义可知,二叉树可以是空集,其根可以有空的左子树或右子树,或者左、
5、右子树皆为空。跳转到第一页 特点:特点:(1)每个结点至多有二棵子树(即不存在度大于2的结点);(2)二叉树的子树有左、右之分,且其次序不能任意颠倒;一般地,二叉树有五种基本形态,如图5.3所示。A只有根结点的二叉树空二叉树AB右子树为空AB左子树为空ABC左、右子树均非空图5.3跳转到第一页(1)满二叉树:定义1:在一个二叉树中,若第i层的结点数为2i-1,则称此层的结点数是满的,当树中的每一层都是满的,则称此二叉树为满二叉树。定义2:如果一个二叉树中,除最下一层的各结点度数为0以外,其它各层结点的度数均等于2,则此二叉树为满二叉树。特点:每一层上的结点数都是最大结点数。跳转到第一页1231
6、145891213671014151234567123114589126710123456满二叉树完全二叉树跳转到第一页 (2)完全二叉树:定义:一颗深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号(自左而右)从1至n的结点一一对应时,称为。特点:深度为k的完全二叉树,其前k-1层是一颗满二叉树;最后第k层的结点都尽量排在靠左的位置上。跳转到第一页1、性质1:)1(21iii个结点层上至多有在二叉树的第证明:用归纳法证明之 i=1时,只有一个根结点,是对的 假设对所有j(1j1,则其双亲是i/2 (2)如果2in,则其左孩子是2i;如果2in,则结点i无左孩子;(3
7、)如果2i+1n,则其右孩子是2i+1;如果2i+1n,则结点i无右孩子;跳转到第一页作业作业1:书上书上P87 1、4、5跳转到第一页 1 1、顺序存储结构、顺序存储结构l实现:按满二叉树的结点层次编号(从上至下,从左至右),依次存放二叉树中的数据元素,即将编号为i的结点存入一维数组的第i个单元。例如:例如:一般二叉树的存储abcdefga b c d e f g 1 2 3 4 5 6 7 8 9 10 11跳转到第一页l特点:u结点间关系蕴含在其存储位置中,即这种次序应能反映结点间的逻辑关系;u浪费空间,适于存储满二叉树和完全二叉树.应用:由二叉树,画出此二叉树的存储结构 由二叉树的存储
8、结构画出此二叉树跳转到第一页 A B C E F G D A B D C E G F Exercise1:Key:跳转到第一页Exercise2:1 2 3 4 5 6 7 8 9 10 11 12 13a b c d e f gabcedfgKey:跳转到第一页 2 2、链式存储结构、链式存储结构 对于非完全二叉树,可以采用链式,链表的头指针均指向根结点。二叉链表 通常每个结点中设置三个域,即数据(值)域、左指针域和右指针域,其结点结构如下:typedef struct node datatype data;struct node *lchild,*rchild;JD;left data r
9、ight 跳转到第一页ABCDEFG在n个结点的二叉链表中,有n+1个空指针域lchild data rchild A B C D E F G 例如:例如:跳转到第一页三叉链表lchild data parent rchildABCDEFG A B C D E F G 跳转到第一页 5.3 5.3 二叉树的遍历二叉树的遍历 1、遍历(Traversal)是指按一定的规律访问树的每个结点,且每个结点只被访问一次的过程,即找一个完整而有规律的走法,将非线性结构的树中的结点排列成一个线性序列的过程。跳转到第一页2、遍历的常用方法:l先根(序)遍历:先访问树的根结点,然后依次先根遍历根的每棵子树;l后
10、根(序)遍历:先依次遍历每棵子树,然后访问根结点;中序遍历:先依次访问树的左子树,根结点,然后访问树的右子树;l按层次遍历:先访问第一层上的结点,然后依次遍历第二层,第n层的结点。跳转到第一页 一个非空的二叉树由根结点及左、右子树这三个基本部分组成,因此若能依次遍历这三部分,便是遍历了整个二叉树。可以按某种次序执行三个操作:访问结点本身,遍历该结点左子树,遍历该结点右子树,操作排列次序:左、根、右;根、左、右;左、右、根;右、根、左;根、右、左;右、左、根;跳转到第一页 由于实际问题一般都是要求左子树较右子树先遍历,故只采用其中、三种遍历次序,分别称为中序遍历、先序遍历和后序遍历。对于用顺序法
11、表示的二叉树,各结点在数组中的编号很有规律,其遍历较容易进行,但对于用链式存储结构表示的二叉树,进行遍历就复杂一些。三种遍历次序以递归的形式定义:跳转到第一页1、先序(、先序(Preorder)遍历遍历若遍历的二叉树不为空,则依次执行下列操作:访问根结点;先序遍历左子树;先序遍历右子树。2、中序(、中序(Inorder)遍历遍历若遍历的二叉树不为空,则依次执行下列操作:中序遍历左子树;访问根结点;中序遍历右子树。跳转到第一页 3、后序(后序(Postorder)遍历遍历若遍历的二叉树为空,执行空操作;否则依次执行下列操作:后序遍历左子树;后序遍历右子树;访问根结点。例:按不同的遍历方法,写出二
12、叉树遍历所例:按不同的遍历方法,写出二叉树遍历所得到的结点序列。得到的结点序列。跳转到第一页ADBCDD L RAD L RD L RBCD L R先序遍历先序遍历:先序遍历序列:A B D C跳转到第一页中序遍历中序遍历:中序遍历序列:B D A CL D RBL D RL D RADCL D RADBC跳转到第一页ADBC后序遍历后序遍历:后序遍历序列:D B C A L R DL R DL R DADCL R D跳转到第一页Exercise1:-+/a*b-efcdKey:先序:-+a *b -c d /e f 中序:a +b *c -d -e /f 后序:a b c d -*+e f
13、/-写出下列二叉树的三种序列。Exercise2:书上,P87跳转到第一页Exercise3:已知一个二叉树的前序和中序分别为ABCDEFGH和BDCEAFHG,请画出此二叉树。B C D E F G A H Key3:跳转到第一页typedef struct node datatype data;struct node *left,*right;btree;链式存储结构的结点定义如下:链式存储结构的结点定义如下:先序遍历递归算法:跳转到第一页void preorder(JD*bt)if(bt!=NULL)printf(%dt,bt-data);preorder(bt-lchild);preo
14、rder(bt-rchild);返回pre(T R);返回T右是空返回返回返回返回pre(T R);T左是空返回T左是空返回TDprintf(D);pre(T L);Dpre(T R);TBprintf(B);pre(T L);BTCprintf(C);pre(T L);C主程序主程序Pre(T)TAprintf(A);pre(T L);AT左是空返回T右是空返回pre(T R);先序序列:A B D C跳转到第一页中序遍历递归算法:void inorder(btree*p)if(p!=NULL)inorder(p-left);printf(%d,p-data);inorder(p-right
15、);跳转到第一页作业作业2:1、有一颗二叉树 如下图,分别写出其先序、中序、后序遍历序列。abcdehifg2、书上,P87 3跳转到第一页3、有一颗二叉树 如下图,分别写出其先序、中序、后序遍历序列。B C D E F G A H I 跳转到第一页 4、采用顺序存储方法和链式存储方法分别画出如下图所示二叉树的存储结构。跳转到第一页Key1:先序:先序:a b d e h c f g i 中序:中序:d b h e a f c i g 后序:后序:d h e b f I g c a Key3:v中序遍历序列:H,D,I,B,E,A,F,C,Gv先序遍历序列:A,B,D,H,I,E,C,F,Gv
展开阅读全文