操作系统教程北京大学出版第六章树课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《操作系统教程北京大学出版第六章树课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 教程 北京大学 出版 第六 课件
- 资源描述:
-
1、 第6章 树本章要点树的相关概念、树的表示、逻辑特征二叉树的相关概念、二叉树的性质二叉树的存储和遍历树、森林和二叉树的转换二叉树的应用(哈夫曼树的构造和编码)通过本章学习,应深入掌握树的相关概念、树的表示和树的性质;二叉树的相关概念、二叉树的性质、二叉树的逻辑结构和存储结构,二叉树的基本运算以及实现算法,二叉树的应用。树是一类重要的非线性数据结构,是以分支关系定义的层次结构。6.1 树的定义v 定义定义:树(tree)是n(n0)个结点的有限集T,它满足如下两个条件:(1)有且仅有一个特定的称为根(root)的结点。(2)当n1时,其余的结点可分为m(m 0)个互不相交的有限集合T1,T2,T
2、m,其中每一个集合本身又是一棵树,称为根的子树(subtree)特点:o 树中至少有一个结点根o 树中各子树是互不相交的集合A只有根结点的树子树ABCDEFGHIJKLM有子树的树根图6.1只有根结点和有子树的树*一棵树是由若干棵子树构成,而子树又可由若干棵更小的子树构成。v 树的基本概念v 结点的度(degree)一个结点的子树个数v 叶子(leaf)度为0的结点(或称为终端结点或非终端结点)v 孩子(child)树中某个结点的子树之根称为该结点的孩子。v 双亲(parents)孩子结点的上层结点叫该结点的v 兄弟(sibling)同一双亲的孩子v 子孙结点(Descendant)一个结点的
3、所有子树中的结点称为该结点的子孙结点。v 祖先结点(Ancestor)从树根结点到达一个结点的路径上通过的所有结点称为该结点的祖先结点。v 树的度一棵树中结点最大的度数v 结点的层数(level)从根结点算起,根为第一层,它的孩子为第二层v 树的深度(depth)或高度(Height)树中结点的最大层数v 森林(forest)m(m 0)棵互不相交的树的集合v 路径(path)或道路v 有序树(ordered tree):树中结点的各子树从左至右是有次序的(不能互换)。v 无序树(unordered tree):v 树形结构的逻辑特征:树中任一结点都可以有零个或多个后继(即孩子)结点,但至多只
4、能有一个前趋(即双亲)结点。树中只有根结点无前趋,叶子结点无后继。显然,父子关系是非线性的,故树形结构是非线性结构。祖先和子孙的关系是对父子关系的延拓,它定义了树中结点的纵向次序。ABCDEFGHIJKLM结点A的度:3结点B的度:2结点M的度:0结点A的孩子:B,C,D结点B的孩子:E,F结点A的层次:1结点M的层次:4树的度:3叶子:K,L,F,G,M,I,J结点I的双亲:D结点L的双亲:E结点B,C,D为兄弟结点K,L为兄弟树的深度:4结点F,G为堂兄弟结点A是结点F,G的祖先 图6.2 树v树的表示 树有树形表示法、嵌套集合表示法、凹入表表示法、广义表表示法等。一个如下逻辑结构的树:T
5、=(K,N)K=a,b,c,d,e,f,g,h,i,j N=,a(b(d,e(i,j),f),c(g,h)(d)嵌套括号表示法图6.3 树的各种表示法6.2 二叉树定义v定义:二叉树是n(n 0)个结点的有限集,它或者是空集(n=0),或由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树构成。v特点l每个结点至多有两棵子树(即不存在度大于2的结点)l二叉树的子树有左、右之分,且其次序不能任意颠倒 二叉树并非是树的特殊情形,尽管二者有许多相同之处,但它们 是两种不同的数据结构。v基本形态A只有根结点的二叉树空二叉树AB右子树为空AB左子树为空ABC左、右子树均非空证明:用归纳法
6、证明之 i=1时,只有一个根结点,是对的 假设对所有j(1jBDCD L R先序遍历序列:A B D C先序(前序)遍历二叉树:ADBCL D RBL D RL D RADCL D R中序遍历序列:B D A C中序遍历二叉树:ADBC L R DL R DL R DADCL R D后序遍历序列:D B C A后序遍历二叉树:B-+/a*b-efcd先序遍历:中序遍历:后序遍历:层次遍历:-+a*b-c d/e f-+a*b-cd/ef-+a*b-c d/e f-+a*b-c d/e fDLRLDRLRDv 算法(1)前序遍历算法 DLR void PreOrder(bitree*t)/*前序
7、遍历二叉树*/if(t!=NULL)printf(“t%cn”,t-data);/*打印根结点*/PreOrder(t-lchild);/*前序遍历*t左子树*/PreOrder(t-rchild);/*前序遍历*t右子树*/(2)中序遍历算法 LDR void InOrder(bitree*t)/*中序遍历二叉树*/if(t!=NULL)/*二叉树t非空*/InOrder(t-lchild);/*中序遍历*t的左子树*/printf(“/t%cn”,t-data);/*打印根结点*/InOrder(t-rchild);/*中序遍历*t的右子树*/(3)后序遍历算法 LRD PostOrder
8、(bitree*t)/*后序遍历二叉树*/if(t!=NULL)/*二叉树t非空*/PostOrder(t-lchild);/*后序遍历*t的左子树*/printf(“/t%cn”,t-data);/*打印根结点*/PostOrder(t-rchild);/*后序遍历*t的右子树*/若去掉三中遍历算法中的打印输出语句,三种遍历算法 基本相同。说明这三种遍历的搜索路线相同。该路线从根结点出发,逆时针沿着二叉树外缘移动,对每个结点均途径三次。(参教材Page97-98)void preorder(bitree*bt)if(bt!=NULL)printf(%dt,bt-data);preorder(
9、bt-lchild);preorder(bt-rchild);主程序主程序Pre(T)返回返回pre(T R);pre(T R);ACBDTBprintf(B);pre(T L);BTAprintf(A);pre(T L);ATDprintf(D);pre(T L);DTCprintf(C);pre(T L);C返回T左是空返回pre(T R);T左是空返回T右是空返回pre(T R);返回T左是空返回返回T右是空返回递归算法void inorder(bitree*bt)int i=0;bitree*p,*sM;p=bt;do while(p!=NULL)si+=p;/*压栈*/p=p-lch
10、ild;if(i0)p=s-i;/*出栈*/printf(%dt,p-data);p=p-rchild;while(i0|p!=NULL);非递归算法BApCDEFGip-A(1)ABCDEFGpip-Ap-B(2)ABCDEFGpip-Ap-B(3)p-Cp=NULLABCDEFGiP-AP-B访问:C(4)pABCDEFGiP-A访问:C B(5)ABCDEFGiP-AP-D访问:C Bp(6)ABCDEFGiP-AP-DP-E访问:C Bp(7)ABCDEFGiP-AP-D访问:C B Ep(8)ABCDEFGiP-AP-DP-G访问:C B EP=NULL(9)ABCDEFGiP-A访
11、问:C B E G Dp(11)ABCDEFGiP-AP-F访问:C B E G Dp(12)ABCDEFGiP-AP-D访问:C B E Gp(10)ABCDEFGiP-A访问:C B E G D Fp=NULL(13)ABCDEFGi访问:C B E G D F Ap(14)ABCDEFGi访问:C B E G D F Ap=NULL(15)v遍历算法应用l按先序遍历序列建立二叉树的二叉链表,已知先序序列为:A B C D E G F ABCDEFGbitree*crt_bt_pre(bitree*bt)char ch;printf(ch=);scanf(%c,&ch);getchar()
展开阅读全文