数据结构习题题目及答案_树和二叉树_参考答案(2)

2018-12-04 22:25

A#F# 后序遍历二叉树时结点的访问序列。##D###ECB##FA

6.20有n个结点的k叉树(k≥2)用k叉链表表示时,有多少个空指针? 【解答】k叉树(k≥2)用k叉链表表示时,每个结点有k个指针,除根结点没有指针指向外,其余每个结点都有一个指针指向,故空指针的个数为: nk-(n-1)=n(k-1)+1

6.21 一棵高度为h的满k叉树有如下性质:根结点所在层次为0;第h层上的结点都是叶子结点;其余各层上每个结点都有k棵非空子树,如果按层次自顶向下,同一层自左向右,顺序从1开始对全部结点进行编号,试问: (1)各层的结点个数是多少?

(2)编号为i的结点的双亲结点(若存在)的编号是多少? (3)编号为i的结点的第m个孩子结点(若存在)的编号是多少? (4)编号为i的结点有右兄弟的条件是什么?其右兄弟结点的编号是多少? 【解答】

(1)kl(l为层数,按题意,根结点为0层)

(2)因为该树每层上均有kl个结点,从根开始编号为1,则结点i的从右向左数第2个孩子的结点编号为ki。设n 为结点i的子女,则关系式(i-1)k+2<=n<=ik+1成立,因i是整数,故结点i的双亲的编号为?(i-2)/k?+1。 (3) 结点i(i>1)的前一结点编号为i-1(其最右边子女编号是(i-1)*k+1),故结点 i的第 m个孩子的编号是(i-1)*k+1+m。

(4) 根据以上分析,结点i有右兄弟的条件是,它不是双亲的从右数的第一子女,即 (i-1)%k!=0,其右兄弟编号是i+1。

6.22.证明任一结点个数为n(n>0) 的二叉树的高度至少为?(logn)?+1。 【解答】最低高度二叉树的特点是,除最下层结点个数不满外,其余各层的结点数都应达到各层的最大值。设n个结点的二叉树的最低高度是h,则n应满足2h-1≦n≦2h-1关系式。解此不等式,并考虑h是整数,则有h=?logn?+1,即任一结点个数为n 的二叉树的高度至少为?(logn)?+1。

6.23 已知A[1..N]是一棵顺序存储的完全二叉树,如何求出A[i]和A[j]的最近的共同祖先?

【解答】根据顺序存储的完全二叉树的性质,编号为i的结点的双亲的编号是?i/2?,故A[i]和A[j]的最近公共祖先可如下求出: while(i/2!=j/2) if(i>j) i=i/2; else j=j/2;

退出while后,若i/2=0,则最近公共祖先为根结点,否则最近公共祖先是i/2。

6.24已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有多少个?

【解答】结点个数在20到40的满二叉树且结点数是素数的数是31,其叶子数是16。

6.25求含有n个结点、采用顺序存储结构的完全二叉树中的序号最小的叶子结

点的下标。要求写出简要步骤。

【解答】根据完全二叉树的性质,最后一个结点(编号为n)的双亲结点的编号是?n/2?,这是最后一个分枝结点,在它之后是第一个终端(叶子)结点,故序号最小的叶子结点的下标是?n/2?+1。

6.26 试证明:同一棵二叉树的所有叶子结点,在前序序列、中序序列以及后序序列中都按相同的相对位置出现(即先后顺序相同),例如前序abc,后序bca,中序bac。

【证明】前序遍历是“根-左-右”,中序遍历是“左-根-右”,后序遍历是“左-右-根”。三种遍历中只是访问“根”结点的时机不同,对左右子树均是按左右顺序来遍历的,因此所有叶子都按相同的相对位置出现。

6.27设具有四个结点的二叉树的前序遍历序列为abcd;S为长度等于4的由a,b,c,d排列构成的字符序列,若任取S作为上述算法的中序遍历序列,试问是否一定能构造出相应的二叉树,为什么?试列出具有四个结点二叉树的全部形态及相应的中序遍历序列。

【解答】若前序序列是abcd,并非由这四个字母的任意组合(4!=24)都能构造出二叉树。因为以abcd为输入序列,通过栈只能得到1/(n+1)*2n!/(n!*n!)=14 种,即以abcd为前序序列的二叉树的数目是14。任取以abcd作为中序遍历序列,并不全能与前序的abcd序列构成二叉树。例如:若取中序序列dcab就不能。 该14棵二叉树的形态及中序序列略。

6.28已知某二叉树的每个结点,要么其左、右子树皆为空,要么其左、右子树皆不空。又知该二叉树的前序序列为:JFDBACEHXIK;后序序列为:ACBEDXIHFKJ。请给出该二叉树的中序序列,并画出相应的二叉树树形。

【解答】一般说来,仅仅知道二叉树的前序遍历序列和后序遍历序列并不能确定这棵二叉树,因为并不知道左子树和右子树两部分各有多少个结点。但本题有特殊性,即每个结点“要么其左、右子树皆为空,要么其左、右子树皆不空”。具体说,前序序列的第一个结点是二叉树的根,若该结点后再无其它结点,则二

叉树只有根结点;否则,该结点必有左右子树,且根结点后的第一个结点就是“左子树的根”。到后序序列中查找这个“左子树的根”,它将后序序列分成左右两部分:左部分(包括所查到的“左子树的根结点”)是二叉树的左子树(可能为空),右部分(除去最后的根结点)则是右子树(可能为空)。这样,在确定根结点后,就可以将后序遍历序列(从而也将前序遍历序列)分成左子树和右子树两部分了。 本题中,先看前序遍历序列,第一个结点是J,所以J是二叉树的根,J后面还有结点,说明J有左、右子树,J后面的F必是左子树的根。到后序遍历序列中找到F,F将后序遍历序列分成两部分:左面ACBEDXIH,说明FACBEDXIH是根J的左子树;右面K(K的右面J已知是根),说明K是根J的右子树。这样,问题就转化为“以前序序列FDBACEHXI和后序序列ACBEDXIHF去构造根J的左子树”,以及“以前序序列K和后序序列K去构造根J的右子树”了。如此构造下去,所构造的二叉树如下。易见,中序序列为ABCDEFXHIJK。

6.29 已知一个森林的先序序列和后序序列如下,请构造出该森林。 先序序列:ABCDEFGHIJKLMNO 后序序列:CDEBFHIJGAMLONK

【解答】森林的先序序列和后序序列对应其转换的二叉树的先序序列和中序序列,应先据此构造二叉树,再构造出森林。

6.30 画出同时满足下列两条件的两棵不同的二叉树。 (1)按先根序遍历二叉树顺序为ABCDE。 (2)高度为5其对应的树(森林)的高度最大为4。 【解答】

6.31用一维数组存放的一棵完全二叉树;ABCDEFGHIJKL。请写出后序遍历该二叉树的结点访问序列。

【解答】后序遍历该二叉树的结点访问序列为:DECGHFBKJLIA

6.32一棵二叉树的先序、中序和后序序列如下,其中有部分未标出,试构造出该二叉树。

先序序列为: C D E G H I K 中序序列为:C B F A _ J K I G 后序序列为: E F D B J I H A 【解答】


数据结构习题题目及答案_树和二叉树_参考答案(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:7学校安全管理制度大全

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: