数据结构第六章精品文稿.ppt
《数据结构第六章精品文稿.ppt》由会员分享,可在线阅读,更多相关《数据结构第六章精品文稿.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构第六章1第1页,本讲稿共39页主要讨论的问题:树的定义;二叉树的定义与性质主要讨论的问题:树的定义;二叉树的定义与性质,二叉二叉树的遍历树的遍历,线索二叉树线索二叉树,树与森林哈夫曼树及应用树与森林哈夫曼树及应用.6.1树的定义与基本术语树的定义与基本术语.回忆线性结构的特点回忆线性结构的特点.非线性结构的特点非线性结构的特点:至少存在一个数据元素有两个至少存在一个数据元素有两个或两个以上的直接前驱(或直接后继)元素的数或两个以上的直接前驱(或直接后继)元素的数据结构据结构.人类的族谱、各种社会关系、各类分类编码;人类的族谱、各种社会关系、各类分类编码;操作系统的文件系统、编译程序的语
2、法树;操作系统的文件系统、编译程序的语法树;Internet中的中的DNS(域名系统)(域名系统)-层次结构层次结构第2页,本讲稿共39页.树的定义树的定义(递归定义递归定义)是是n(n0)个结点的有限集合个结点的有限集合T,对于任意一棵,对于任意一棵非空树,它满足:非空树,它满足:(1)有且仅有一个特定的称为根的结点。有且仅有一个特定的称为根的结点。(2)当当n1时,其余结点可分为时,其余结点可分为m(m0)个互个互不相交的有限集不相交的有限集T1,T2,.,Tm,其中每,其中每个集合本身又是一棵树,称为根的个集合本身又是一棵树,称为根的子树子树。显然:上述树的定义是一个递归定义。显然:上述
3、树的定义是一个递归定义。3第3页,本讲稿共39页.常用术语与基本概念常用术语与基本概念.结点的度、树的度、叶子结点、分支结点结点的度、树的度、叶子结点、分支结点.内部结点、结点的孩子、兄弟、结点的祖先、结点内部结点、结点的孩子、兄弟、结点的祖先、结点的子孙、结点的层次的子孙、结点的层次.树的深度、无序树、有序树、森林树的深度、无序树、有序树、森林.4第4页,本讲稿共39页6.2二叉树二叉树.二叉树的定义二叉树的定义 是由是由n(n=0)个结点的有限集合,它或为空树个结点的有限集合,它或为空树(n=0),或由一个根结点和至多两棵称为根的左子或由一个根结点和至多两棵称为根的左子树和右子树的互不相交
4、的二叉树组成树和右子树的互不相交的二叉树组成.结论结论:二叉树中不存在度大于二叉树中不存在度大于2的结点,并且二的结点,并且二叉树的子树有左子树和右子树之分叉树的子树有左子树和右子树之分.即二叉树是即二叉树是度不大于度不大于2的有序树的有序树.二叉树的五种形态二叉树的五种形态.5第5页,本讲稿共39页.二叉树的性质二叉树的性质性质性质1:在二叉树的第在二叉树的第i层上至多有层上至多有2i-1个结个结(i=1).性质性质2:高度为高度为k的二叉树中至多有的二叉树中至多有2k-1个结点个结点(k=1).性质性质3:在任意一棵二叉树中在任意一棵二叉树中,若其叶子结点数为若其叶子结点数为n0,度为度为
5、2的结点数为的结点数为n2,则有:则有:n0=n2+1.性质4:具有n个结点的完全二叉树的深度为6第6页,本讲稿共39页.满二叉树满二叉树 是指高度为是指高度为k且有且有2k-1个结点的二叉树个结点的二叉树.特点:每一层上都有含有最大结点数特点:每一层上都有含有最大结点数.结点编号结点编号:从上到下从上到下,从左到右按自然数编号从左到右按自然数编号.完全二叉树完全二叉树 高度为高度为k,有,有n个结点的二叉树是一棵完全二叉树,个结点的二叉树是一棵完全二叉树,当且仅当其每个结点都与高度为当且仅当其每个结点都与高度为k的满二叉树中层次编的满二叉树中层次编号号1-n相对应相对应.7第7页,本讲稿共3
6、9页.完全二叉树的特点完全二叉树的特点1)除最后一层外,每一层都取最大结点数,最后一除最后一层外,每一层都取最大结点数,最后一层结点都有集中在该层层结点都有集中在该层最左边的若干位置最左边的若干位置.2)叶子结点叶子结点只可能在层次最大的两层出现只可能在层次最大的两层出现.3)对任一结点,若其右分支下的子孙的最大层次为对任一结点,若其右分支下的子孙的最大层次为k,则其左分支下的子孙的最大层次为则其左分支下的子孙的最大层次为k或或k+1.性质4:具有n个结点的完全二叉树的深度为8第8页,本讲稿共39页性质5:对有n个结点的完全二叉树的结点按层序编号(从上到下,自左到右)对任一结点i(1=in),
7、若若in/2,则,则i无左孩子。无左孩子。(3)若若i(n-1)/2,结点,结点i的或孩子是结点的或孩子是结点2i+1;否则否则(即即2i+1n),结点结点i无右孩。无右孩。9第9页,本讲稿共39页性质5的证明:对i=1,由完全二叉树定义知,其左孩为结2,右孩为结点3;若2n(即2in),显然结点2不存在,即此时i无左孩;若3n(即2i+1n),则结点3不存在。由此:对于i=1时,上述性质(2),(3)成立。后续证明i1的情形10第10页,本讲稿共39页性质5的证明(续):对i1,将结点i处于某层第一个结点和该层任意一个结点两种情形分别证明:情况一:设结点i为第j层()的第一个结点.j-1 j
8、 j+1i=2j-1-1i=2j-12j=2i2j+1=2i+12j-1.k k-1 .?+1续证i1的情形11第11页,本讲稿共39页性质5的证明(续):?j-1 j j+1i=2j-1-1i=2j-12j=2i2j+1=2i+12j-1.k k-1 .?+1 由二叉树的性质二可得:第j-1层最后一个结点为2j-1-1;又根据完全二叉树的特点知:第j层的第一个结点应为i=2j-1-1+1=2j-1.又因为i的左孩必为第j+1层的第一个结点,显然其编号应为(2j-1)+1即2j.因为2j=2*2j-1=2i(i为2j-1)续证i1的情形12第12页,本讲稿共39页 j-1 j j+1i=2j-
9、1-1i=2j-12j=2i2j+1=2i+12j-1.k k-1 .?+1所以当2jn(即2in)时,编号为2j的结点不存在,即:此时i必无左孩(因为最多只有n个结点).同理:结点i如有右孩,则其右孩必为第j+1层上的第二个结点,其编号为2i+1(即2j+1)否则,若2i+1n,则i必无右孩.续证i1的情形二性质5的证明(续):13第13页,本讲稿共39页 对于第对于第j层的任意第层的任意第k个结点,设上述个结点,设上述(2),(3)的断言成立,即对于任意的的断言成立,即对于任意的i=k,当当2j-1k2j-1时,若结点时,若结点k有左孩,则必为有左孩,则必为2k;若结点;若结点k有右孩,则
10、必为有右孩,则必为2k+1.由此:当由此:当i=k+1(2j-1k2j-1)时,由于时,由于k+1是是k的右兄弟的右兄弟(若堂兄弟若堂兄弟),若,若k+1有左孩,则有左孩,则应为应为2(k+1),同理,如,同理,如(k+1)结点有右孩,则应为结点有右孩,则应为2(k+1)+1.而由完全二叉树的特点知,这而由完全二叉树的特点知,这显然是正确的,由此性质五显然是正确的,由此性质五(2),(3)完全成立完全成立.2k 2k+1 2k+2 j-1 j ji=2j-1-1i=2j-12j=2i2j+1=2i+12j-1.k k-1 .k+1 2k+3性质5的证明(续):14第14页,本讲稿共39页例例1
11、:任意一个有任意一个有n个结点的二叉树,已知它有个结点的二叉树,已知它有m个叶个叶子结点,试证明非叶子结点有子结点,试证明非叶子结点有(m-1)个度为个度为2,其余,其余度为度为1.例例2:已知完全二叉树的第七层有已知完全二叉树的第七层有10个叶子结点,个叶子结点,则整个二叉树的结点数最多是多少则整个二叉树的结点数最多是多少.15第15页,本讲稿共39页.二叉树的存储结构二叉树的存储结构顺序存储结构顺序存储结构用一组地址连续的存储单元依次自上而下,自用一组地址连续的存储单元依次自上而下,自左至右存储完全二叉树上的结点元素左至右存储完全二叉树上的结点元素结论:完全二叉树适合于顺序存储结构结论:完
12、全二叉树适合于顺序存储结构链式存储结构链式存储结构二叉链表表示法二叉链表表示法16第16页,本讲稿共39页例例3.有有n个结点的完全二叉树存放在一维数组个结点的完全二叉树存放在一维数组A1.n中中,试据此建立一棵用二叉链表表示的二叉树试据此建立一棵用二叉链表表示的二叉树,根由根由tree指向指向.分析:分析:1)树的递归定义树的递归定义2)树由几部分组成?树由几部分组成?BiTree Creat(ElemType A,int i)BiTree tree;if(idata=Ai;if (2*in)tree-lchild=null;else tree-lchild=Creat(A,2*i);if
13、(2*i+1n)tree-rchild=null;else tree-rchild=Creat(A,2*i+1);return tree;17第17页,本讲稿共39页例例4要求二叉树按要求二叉树按二叉链表二叉链表形式存储,形式存储,(1)写一个建立二叉树的算法写一个建立二叉树的算法.(2)写一个判别给定的二叉树是否是完全二叉树的写一个判别给定的二叉树是否是完全二叉树的算法算法.BiTree Creat()ElemType x;BiTree bt;scanf(“%d”,&x);/本题假定结点数据域为整型本题假定结点数据域为整型if(x=0)bt=null;else if(x0)bt=(BiNod
14、e*)malloc(sizeof(BiNode);bt-data=x;bt-lchild=creat();bt-rchild=creat();else error(“输入错误输入错误”);return bt;18第18页,本讲稿共39页6.3遍历遍历二叉树和线索二叉树二叉树和线索二叉树.遍历二叉树遍历二叉树按按某条搜索路径某条搜索路径访问二叉树中的每个结点,使访问二叉树中的每个结点,使得每个结点均被访问一次,而且仅被访问一次得每个结点均被访问一次,而且仅被访问一次.先左后右先左后右的搜索路径的搜索路径/先右后左的搜索路径先右后左的搜索路径.先左后右先左后右的搜索路径有三种:先序遍历,中序遍历和
15、的搜索路径有三种:先序遍历,中序遍历和后序遍历后序遍历19第19页,本讲稿共39页.按按先序遍历先序遍历/中序遍历中序遍历/后序遍历把非线性的二叉树后序遍历把非线性的二叉树结构变为了线性结构结构变为了线性结构.那么,变换后的线性结构能否恢复为原来的二叉树?那么,变换后的线性结构能否恢复为原来的二叉树?NO.先序遍历与中序遍历中序遍历和后序遍历能唯一先序遍历与中序遍历中序遍历和后序遍历能唯一确定该二叉树确定该二叉树20第20页,本讲稿共39页例例5.设一棵二叉树的先序遍历序列设一棵二叉树的先序遍历序列:A B D F C E G H,中序遍历序列中序遍历序列:B F D A G E H C,画出
16、这,画出这棵二叉树棵二叉树.二叉树层次遍历二叉树层次遍历(广度优先遍历广度优先遍历).按以上的搜索路径遍历一棵二叉树称之为按以上的搜索路径遍历一棵二叉树称之为二叉树二叉树的深度优先遍历的深度优先遍历搜索路径搜索路径:从二叉树的根开始,自顶向下,同一层:从二叉树的根开始,自顶向下,同一层从左向右从左向右21第21页,本讲稿共39页.二叉树遍历递归算法二叉树遍历递归算法.先序遍历的递归算法先序遍历的递归算法void preorder(BiTree tree)if(tree!=null)visit(tree-data);/访问二叉树的结点访问二叉树的结点 preorder(tree-lchild);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第六 精品 文稿
限制150内