六章树ppt课件.ppt
《六章树ppt课件.ppt》由会员分享,可在线阅读,更多相关《六章树ppt课件.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、六章树ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望树的概念和基本术语n树由n(n 0)个结点组成的有限集合。n如果n=0,称为空树;n如果n 0,则n有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱;n除根以外的其它结点划分为m(m 0)个互不相交的有限集合T0,T1,Tm-1,每个集合又是一棵树,并且称之为根的子树(subTree)。n每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继。n树的表示n树型表示na是
2、根;nT1,T2都是根a的子树,且本身也是一棵树nT1=b,d,e,f,i,j;T2=c,g,h;bacghdefijn凹入表表示abdeijfcghn嵌套集合表示n嵌套括号表示a(b(d,e(i,j),f),c(g,h)ijdfghabcen树的基本术语n结点(node)n结点的度(degree)n结点的子树个数n分支(branch)结点 n度不为0的结点n叶(leaf)结点n度为0的结点n子女(child)结点n某结点子树的根结点n双亲(parent)结点n某个结点是其子树之根的双亲bacghdefijn兄弟(sibling)结点n具有同一双亲的所有结点n祖先(ancestor)结点n若树
3、中结点k到ks存在一条路径,则称k是ks的祖先 n子孙(descendant)结点n若树中结点k到ks存在一条路径,则称ks是k的子孙 n结点所处层次(level)n根结点的层数为1,其余结点的层数为双亲结点的层数加1 n树的高度(depth)n树中结点的最大层数 bacghdefijn 有序树n树中结点的子树由左向右有序,子树的次序不能互换n 无序树n子树的次序可以互换n 森林nm(m 0)棵互不相交的树的集合n对树中每个结点而言,其子树的集合即为森林n树的基本操作n初始化n求指定结点所在树的根结点n求指定结点的双亲结点n求指定结点的某一孩子结点n求指定结点的最右边兄弟结点n将一棵树插入到另
4、一树的指定结点下作为它的子树n删除指定结点的某一子树n树的遍历二叉树(Binary Tree)n二叉树的定义n一棵二叉树是n(n0)个结点的一个有限集合,该集合或者为空(n=0),或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。(递归定义:用二叉树定义二叉树)二叉树的五种不同形态二叉树的五种不同形态二叉树的五种不同形态二叉树的五种不同形态n二叉树的每个结点至多只有两棵子树(二叉树中不存在度大于2的结点)n在二叉树中,子树是有顺序的,下面两棵二叉树是不同的。n思考:画出由三个结点所能组成的所有二叉树。n二叉树的性质n性质1 若二叉树的层次从1开始,则在二叉树的第 i 层
5、最多有 2i-1 个结点。(i 1)证明:i=1 时,有2i-1 =20=1,成立假定:i=k 时性质成立,即第k层最多有2k-1个结点;当 i=k+1 时,由于二叉树的每个结点的度至多为2,故在第i层上的最大结点数为第i-1层上的最大结点数的2倍,第k+1的结点至多是第k层结点的两倍,即总的结点个数至多为22k-1=2kn性质2 高度为k的二叉树最多有2k 1个结点。(k 1)证明:仅当每一层都含有最大结点数时,二叉树的结点数最多,利用性质1可得二叉树的结点数至多为:20+21+22+23+2k-1=2k 1n性质3 对任何一棵二叉树,如果其度为0的叶结点个数为n0,度为2的非叶结点个数为
6、n2,则有n0n21证明:1、结点总数n=度为0的结点数度为1的结点数度为2的结点:n=n0+n1+n22、另一方面,二叉树中一度结点有一个孩子,二度结点有二个孩子,根结点不是任何结点的孩子,因此,结点总数为:n=n1+2n2+13、两式相减,得到:n0=n2+1n特殊形态的二叉树n满二叉树(Full Binary Tree)n一棵深度为k且有2k-1个结点的二叉树n完全二叉树(Complete Binary Tree)n若设二叉树的高度为h。除第h层外,其它各层的结点数都达到最大个数,第h层从右向左连续缺若干结点,这就是完全二叉树。n性质4 具有 n(n 0)个结点的完全二叉树的深度为log
7、2n 1证明:设完全二叉树的深度为 h,则根据性质2和完全二叉树的定义有2h-1-1 n 2h 1,即 2h-1 n 2h取对数 h-1 log2n 1,则 i 的双亲为i/2n若2*i n/2 的结点必定是叶结点n若2*i+1 leftChild);/递归 Visit(T-data);InOrder(T-rightChild);/递归 n先序遍历(Preorder Traversal)n先序遍历二叉树算法的定义:若二叉树为空,则空操作;否则访问根结点(V);先序遍历左子树(L);先序遍历右子树(R)。n遍历结果-+a*b-c d/e fn先序遍历二叉树的递归算法void PreOrder(B
8、iTreeNode*T)if(T!=NULL)Visit(T-data);PreOrder(T-leftChild);PreOrder(T-rightChild);n后序遍历(Postorder Traversal)n后序遍历二叉树算法的定义:若二叉树为空,则空操作;否则后序遍历左子树(L);后序遍历右子树(R);访问根结点(V)。n遍历结果a b c d-*+e f/-n后序遍历二叉树的递归算法:void PostOrder(BiTreeNode*T)if(T!=NULL)PostOrder(T-leftChild);PostOrder(T-rightChild);Visit(T-data)
9、;n*层序遍历n层序遍历二叉树算法的定义若二叉树为空,则空操作;否则,根结点入队,并作为当前结点;如队列不空,循环:将当前结点的左右孩子(非空)入队;做出队操作,队首元素作为当前结点最后,出队序列就是层序遍历序列n遍历结果-+/a*e f b-c d二叉树遍历应用n1、按先序建立二叉树(递归算法)n输入结点值的顺序必须对应二叉树结点先序遍历的顺序。n约定以输入序列中不可能出现的值作为空结点的值以结束递归。n例如用“”或用“-1”表示字符序列或正整数序列空结点。A B C D E G F ABCDEGFA B C D E G F Status CreateBiTree(BiTree&T)scan
10、f(&ch);/读入根结点的值 if(ch=)T=NULL;else if(!(T=(BiTreeNode*)malloc(sizeof(BiTreeNode)/建立根结点 exit(OVERFLOW);T-data=ch;CreateBiTree(T-leftChild);CreateBiTree(T-rightChild);return OK;/CreateBiTreen2、计算二叉树结点个数(递归算法)int Count(BiTreeNode*T)if(T=NULL)return 0;else return(1+Count(T-leftChild)+Count(T-rightChild)
11、;n3.求二叉树中叶子结点的个数(递归算法)int Leaf_Count(BiTree T)if(!T)return 0;/空树没有叶子else if(!T-lchild&!T-rchild)return 1;/叶子结点else return(Leaf_Count(T-lchild)+Leaf_Count(T-rchild);/左子树的叶子数加上右子树的叶子数n4.求二叉树高度(递归算法)int Depth(BiTreeNode*T)if(T=NULL)return 0;else int m=Depth(T-leftChild);int n=Depth(T-rightChild);return
12、(m n)?(m+1):(n+1);n5、在二叉树中查找具有给定值的结点BiTree findnode(BiTree t,Datatype x)if(t=NULL)return NULL;else if(t-data=x)return t;else return(findnode(t-lchild,x)|findnode(t-rchild,x);n6、给定一棵二叉树,输出其嵌套括号表示void print(BiTree t)if(t)printf(“%d”,t-data);if(t-lchild|t-rchild)printf(“(”);print(t-lchild);if(t-rchild)
13、printf(“,”);print(t-rchild);printf(“)”);二叉排序树(Binary Sort Tree)n二叉排序树或者是一棵空二叉树;或者是具有下列性质的二叉树:n(1)若它的左子树左子树不空,则左子树上所有结点的值均小于它的根结点的值;n(2)若它的右子树右子树不空,则右子树上所有结点的值均大于它的根结点的值。n(3)根结点的左右子树分别也是二叉排序树。n二叉排序树可以用来组织一组数据,并且实现在这组数据上的快速检索。n在二叉排序树上检索给定的值限定二叉查找树上任何两个结点均不相同)n(1)若二叉排序树为空,查找失败。n(2)首先用给定的值和根结点的值进行比较,若相等
14、,则查找成功。n(3)若给定的值比根结点的值小,则转根结点的左子树进行查找。n(4)若给定的值比根结点的值大,则转根结点的右子树进行查找。n在上图的二叉排序树中查找下列关键字:(1)kay(2)Eva(3)Royn计算在查找上述关键字时,各进行了几次比较运算?n试想一下,在线性表中查找上述关键字需要作几次比较?树和森林n树的存储结构n1、双亲表示法n以一组连续空间存储树的结点,同时在结点中附设一个指针,存放双亲结点在链表中的位置。n该方法利用每个结点只有一个双亲的特点,可以很方便求结点的双亲,但不方便求结点的孩子。ABCDEFGdataparentA B C D E F G-1 0 0 0 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 六章树 ppt 课件
限制150内