数据结构第二单元练习题答案

数据结构第二单元练习题答案

一、选择

1.树最适合用来表示(  )

A.有序数据元素      B.无序数据元素

C.元素之间具有分支层次关系的数据

D.元素之间无联系的数据

2.在下述结论中,正确的是(  )

①只有一个结点的二叉树的度为0;  ②二叉树的度为2;  ③二叉树的左右子树可任意交换;

④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。

A.①②③     B.②③④    C.②④     D.①④

3.以下说法正确的是(  )

A.任何一棵二叉树中至少有一个结点的度为2

B.任何一棵二叉树中每个结点的度都为2

C.任何一棵二叉树的度肯定等于2

D.任何一棵二叉树的度可以小于2

4.在下列情况中,可称为二叉树的是(  )

A.每个结点至多有两棵子树的树         B.哈夫曼树

C.每个结点至多有两棵子树的有序树

D.每个结点只有一棵右子树     E.以上答案都不对

5.深度为h的满m叉树的第k层有(  )个结点(1=<k=<h)

A.mk-1    B.mk-1     C.mh-1      D.mh-1

6.在一棵高度为k的满二叉树中,结点总数为(  )

A.2k-1        B.2k             C.2k-1     D.ëlog2kû+1

7.在一棵三元树中度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为(  )个

A.4       B.5       C.6      D.7

8.具有10个叶结点的二叉树中有(  )个度为2的结点。

A.8    B.9      C.10       D.ll

9.二叉树有n个结点,则其深度为(   )

A.n-1   B.n  C.(log2n)+`1 D.无法确定

该题是二叉树不是完全二叉树

由二叉树结点的公式:n=n0+n1+n2=n0+n1+(n0-1)=2n0+n1-1, 因为n=1001,所以1002=2n0+n1,在完全二叉树树中,n1只能取0或1,在本题中只能取0,故n=501,因此选E。

10.一个具有1025个结点的二叉树的高h为(  )

A.11 B.10   C.11至1025之间  D.10至1024之间

11.一棵具有 n个结点的完全二叉树的深度是(  )

A.ëlog2nû+1   B.log2n+1    C.ëlog2nû    D.log2n-1

12.将有关二叉树的概念推广到三叉树,则一棵有244个结点的完全三叉树的高度(  )

A.4        B.5      C.6       D.7

13.将一棵有100个结点的完全二叉树从根结点这一层开始,每一层上从左到右依次对结点编号,根结点的编号为1,则编号为49的结点的左孩子编号为( )

A.98   B.99   C.50   D.48

利用二叉树的性质5

14.在完全二叉树中,若一个结点是叶结点,则它没(  )

A.左子结点    B.右子结点  C.左子结点和右子结点

D.左子结点,右子结点和兄弟结点

15.当一棵有n个结点的二叉树按层次从上到下,同层次从左到右将数据存放在一维数组 A[l..n]中时,数组中第i个结点的左孩子为(  )

A.A[2i](2i=<n)    B.A[2i+1](2i+1=<n)

C.A[i/2]          D.无法确定

16.在下列存储形式中,(  )不是树的存储形式?

A.双亲表示法       B.孩子链表表示法

C.孩子兄弟表示法   D.顺序存储表示法

17.以下说法错误的是(  )

A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达

B.三叉链表,二叉树求双亲运算很容易实现

C.在二叉链表上,求左.右孩子等很容易实现

D.在二叉链表上,求双亲运算的时间性能很好

18.对二叉树从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用( )次序的遍历实现编号。      A.先序遍历    B.中序遍历

C.后序遍历    D.从根开始的层次遍历

19.某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,… ,n,且有如下性质:T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。这时是按(  )编号的。

A.中序遍历序列      B.前序遍历序列

C.后序遍历序列      D.层次顺序

20.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足(  )

A.所有的结点均无左孩子

B.所有的结点均无右孩子

C.只有一个叶子结点

D.是任意一棵二叉树

先序序列是“根左右”,后序序列是“左右根”,若要这两个序列相反,只有单支树,所以本题的A和B均对,单支树的特点是只有一个叶子结点,故C是最合适的,选C。A或B都不全

21.对含有(  )个结点的非空二叉树,采用任何一种遍历方式,其结点访问序列均相同。

A.0   B.1   C.2     D.不存在这样的二叉树

22.下面的说法中正确的是(  )

(1)任何一棵二叉树的叶子结点在三种遍历中的相对次序不变;

(2)按二叉树定义,具有三个结点的二叉树共有6种。

A. (1)(2)   B. (1)   C. (2)    D. (1).(2)都错

23.以下说法错误的是(   )

A.存在这样的二叉树,对它采用任何次序的遍历,其结点访问序列均相同

B.二叉树是树的特殊情形

C.由树转换成二叉树,根结点右子树总是空的

D.在二叉树只有一棵子树的情况下也要明确指出该子树是左子树还是右子树

24.以下说法正确的是(   )

A.一般来说,若深度为k的n个结点的二叉树具有最小路径长度,那么从根结点到第k-1层具有最多的结点数为2k-1-1余下的n-2k-1+1个结点在第k层的任一位置上

B.若有一个结点是某二叉树子树的先序遍历序列中的最后一个结点,则它必是该子树的后序遍历序列中的最后一个结点。

C.若一个结点是某二叉树子树的前序遍历序列中的最后一个结点,则它必是该子树的中序遍历序列中的最后一个结点。

25.以下说法正确的是(    )

A.若一个树叶是某二叉树子树的前序遍历序列中的最后一个结点,则它必是该子树的后序遍历序列中的最后一个结点。

B.若一个树叶是某二叉树子树的前序遍历序列中的最后一个结点,则它必是该子树的中序离历序列中的最后一个结点

C.二叉树中,具有两个孩子的父结点,在中序遍历序列中,它的后继结点最多只能有一个孩子结点。

D.在二叉树中,具有一个孩子结点,在中序遍历序列中,它没有后继孩子结点。

26.以下说法错误的是(    )

A.赫夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

B.若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。

C.已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的根结点是哪一个。

D.在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接根在该结点的之后。

27.以下说法正确的是(  )

A.若一个树叶是某二叉树前序遍历序列中的最后一个结点,则它必是该子树后序遍历序列中的最后一个结点.

B.若一个树叶是某二叉树前序遍历序列中的最后一个结点,则它必是该子树中序遍历序列中的最后一个结点.

C.在二叉树中,具有两个子女的父结点,在中序遍历序列中,它的后继结点最多只能有一个子女结点.

D.在二叉树中,具有一个子女的父结点,在中序遍历序列中,它没有后继子女结点

28.二叉树先序遍历:EFHIGJK;中序遍历: HFIEJKG 。该二叉树根的右子树的根是(  )

A.E    B.F   C.G     D.H

29.已知某二叉树的后续遍历序列是dabec,中序遍历序列是deabc,它的前序遍历序列是(  )

A.acbed   B.deabc   C.decab  D.cedba

30.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,其后序遍历的结点访问顺序是(  )

A.bdgcefha   B.gdbecfha  C.bdgechfa  D.gdbehfca

31.若二叉树采用二叉链表存储结构,要交换其所有分支结点左.右子树的位置,利用(  )遍历方法最合适。

A.前序     B.中序      C.后序      D.按层次

32.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为(  )

A.-A+B*C/DE           B.-A+B*CD/E

C.-+*ABC/DE           D.-+A*BC/DE

33.算术表达式a+b*(c+d/e)转为后缀表达式后为(  )

A.ab+cde/*      B.abcde/+*+

C.abcde/*++     D.abcde*/++

34.一棵左右子树均不空的二叉树在先序线索化后,其空指针域数为( )

A.0     B.1      C.2      D.不确定

二叉树先序遍历序列的第一个结点无前驱,但第一个结点为根结点,有左孩子,所以左指针域不为空。最后一个结点无后继,而且是叶子结点,无右孩子,所以仍为空。其余结点均有前驱和后继,所以不会为空。

35.一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是(  )

A.不确定         B.0        C.1        D.2

左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域。

36.若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为(  )

A.X的双亲              B.X的右子树中最左的结点

C.X的左子树中最右结点  D.X的左子树中最右叶结点

37.引入二叉线索树的目的是(  )

A.加快查找结点的前驱或后继的速度

B.为了能在二叉树中方便的进行插入与删除

C.为了能方便的找到双亲  D.使二叉树的遍历结果唯一

38.n个结点的线索二叉树上含有的线索数为(  )

A.2n      B.n-l       C.n+l         D.n

线索二叉树是利用二叉树的空链域加上线索,n个结点的二叉树有n+1个空链域。

39.讨论树.森林和二叉树的关系,目的是为了(  )

A.借助二叉树上的运算方法去实现对树的一些运算

B.将树.森林按二叉树的存储方式进行存储

C.将树.森林转换成二叉树

D.体现一种技巧,没有什么实际意义

40.利用二叉链表存储树,则根结点的右指针是(  )

A.指向最左孩子  B.指向最右孩子  C.空  D.非空

41.如果T2是由有序树T转换而来的二叉树,那么T中结点的后序就是T2中结点的(  )

A.先序       B.中序        C.后序    D.层次序

42.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序.中序和后序三种遍历。我们把由树转化得到的二叉树称该树对应的二叉树,则下面(  )是正确的。

A.树的先根遍历序列与其对应的二叉树先序遍历序列相同

B.树的后根遍历序列与其对应的二叉树后序遍历序列相同

C.树的先根遍历序列与其对应的二叉树中序遍历序列相同

D.以上都不对

43.以下说法正确的是(   )

A.先根遍历树和先序遍历与该树对应的二叉树,其结果不同

B.后根遍历树和先序遍历与该树对应的二叉树,其结果不同

C.先序遍历森林和先序遍历与该森林对应的二叉树,其结果不同

D.中序遍历森林和中序遍历与该森林对应的二叉树,其结果不同

44.森林T中有4棵树,第一.二.三.四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的左孩子上有(  )个结点。

A.n1-1    B.n1    C.n1+n2+n3   D.n2+n3+n4

45.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是(  )

A.m-n   B.m-n-1    C.n+1   D.条件不足,无法确定

46.设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有(  )个

A.n-1       B.n       C.n+1       D.n+2

47.以下说法错误的是(  )

A.一般在哈夫曼树中,权值越大的叶子离根结点越近

B.哈夫曼树中没有度数为1的分支结点

C.若初始森林中共有N棵二树,最终求得的哈夫曼树中共有2N-1个结点

D.若初始森林中共有N棵二叉树,进行2N-1次合并后才能剩下最终的哈夫曼树

48.以下说法错误的是(  )

A.一般在赫夫曼树中,权值越大的叶子离根结点越近

B.赫夫曼树中没有度数为1的分支结点

C.若初始森林中共有n棵二叉树,最终求得的赫夫曼树共有2n-1个结点

D.若初始森林中共有n棵二叉树,进行2n-1次合并后才能剩下一棵最终的赫夫曼树

49.设有13个值,用它们组成一棵哈夫曼树,则该哈夫曼树共有(  )个结点.

A.13     B.12    C.26    D.25

50.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为(  )

A.n-1      B.ën/mû-1     C.é(n-1)/(m-1)ù

D. én/(m-1)ù-1          E.é(n+1)/(m+1)ù-1

51.下述编码中哪一个不是前缀码(  )

A.00,01,10,11       B.0,1,00,11

C.0,10,110,111      D. 1,01,000,001

二、填空

1.n(n>1)个结点的各棵树中,其深度最小的那棵树的深度是_(1) 2 __。它共有_(2) n-1 __个叶子结点和_(3) 1 __个非叶子结点,其中深度最大的那棵树的深度是_(4) n __,它共有_(5)_ 1 _个叶子结点和_(6) n-1__个非叶子结点。

2.如果结点A有 3个兄弟,而且B是A的双亲,则B的度是_4 _____。

3.二叉树由_(1) 根结点__,__(2) 左子树_,_(3) 右子树 __三个基本单元组成。

4.设只含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为_(1)2K+1-1___,最小结点数为_(2)_ k+1_。

5.在一棵二叉树中,度为零的结点的个数为N0,度为2的结点的个数为N2,则有N0 =__ N2+1____

6.如某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数为___69___。

7.高度为K的完全二叉树至少有__2k-2____个叶子结点。

8.高度为8的完全二叉树至少有___64 ___个叶子结点。

9.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是_ 99_____。

10.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有___12 ___个叶子结点。

11.一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为__21____。

11.一棵有n个结点的满二叉树有__(1) 0 _个度为1的结点、有__(2) (n-1)/2_个分支 (非 终端)结点和__(3) (n+1)/2 _个叶子,该满二叉树的深度为_(4)ëlog2nû +1__。

12.深度为k(设根的层数为1)的完全二叉树至少有 (1) 2k-1    个结点,至多有 (2) 2k-1   个结点,k和结点数n之间的关系是 (3)  k= ë log2n û+1     。

13.在完全二叉树中,编号为i和j的两个结点处于同一层的条件是_ëlog2iû=ëlog2jû_____。

14.对于一个具有n个结点的二叉树,当它为一棵_(1) 完全二叉树_二叉树时具有最小高度,当它为一棵_(2) 单枝树,树中任一结点(除最后一个结点是叶子外),只有左子女或只有右子女。_时,具有最大高度。

15.假设根结点的层数为1,具有n个结点的二叉树的最大高度是_ n _____。

16.具有256个结点的完全二叉树的深度为___9 ___。

17.一棵完全二叉树有999个结点,它的深度是     10    。

18.一个有2001个结点的完全二叉树的高度为_ 11 __。

19.二叉树有不同的链式存储结构,其中最常用的是 (1)二叉链表  与  三叉链表    。

20.二叉树的先序序列和中序序列相同的条件是_任一结点均无左孩子_____。

21.在一棵二叉树中,若有一个结点是它的双亲的左子女,且它的双亲有右子女,则这个结点在后序遍历中的后继结点是__双亲的右子树中最左下的叶子结点____。

22.每一棵树都能唯一的转换为它所对应的二叉树。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列是_(1) FEGHDCB __。设上述二叉树是由某棵树(或森林)转换而成,则第一棵树的先根次序序列是_(2)_ BEF

23.二叉树结点的中序序列为ABCDEFG,后序序列为BDCAFGE,则该二叉树结点的前序序列为_(1) EACBDGF __,则该二叉树对应的树林包括_(2) 2__棵树。

24.已知一棵二叉树的前序序列为abdecfhg,中序序列为dbeahfcg,则该二叉树的根为_(1) a __,左子树中结点有_(2) dbe __, 右子树中结点有_(3) hfcg __。

25.现有按中序遍历二叉树的结果为abc,问有_(1) 5 __种不同的二叉树可以得到这一遍历结果,这些二叉树分别是_(2)_ 略 _(画出树型)。

26.中缀式a+b*3+4*(c-d)对应的前缀式为__(1) ++a*b3*4-cd _,若a=1,b=2,c=3,d=4,则后缀式db/cc*a-b*+的运算结果为_(2) 18__。

27.线索二叉树的左线索指向其 (1) 前驱   ,右线索指向其   (2)  后继  .

28.一棵左子树为空的二叉树在先序线索化后,其中的空链域的个数为:_2_____。

29.树在计算机内的表示方式有_(1) 双亲表示法_,_(2) 孩子表示法__,_(3) 孩子兄弟表示法

30.利用树的孩子兄弟表示法存储,可以将一棵树转换为__二叉树 ____。

31.设F是由T1,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知T1,T2,T3的结点数分别为n1,n2和n3则二叉树B的左子树中有__(1) n1-1_个结点,右子树中有_(2) n2+n3 __个结点。

32.先根次序遍历树林正好等同于按_(1) 先序__遍历对应的二叉树,后根次序遍历树林正好等同于按__(2) 中序_遍历对应的二叉树。

33.先根次序遍历森林正好等同于按____先序__遍历对应的二叉树;中根次序遍历森林正好等同于__中序____遍历对应的二叉树。

34.哈夫曼树是__带权路径长度最小的二叉树,又称最优二叉树____。

35.设n0为哈夫曼树的叶子结点数目,则该哈夫曼树共有   2n0-1  个结点。

36.哈夫曼树是带权路径长度   最短   的树,通常权值较大的结点离根  较近    .

37.若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是__69 ____。

38.有一份电文中共使用 6个字符:a,b,c,d,e,f,它们的出现频率依次为2,3,4,7,8,9,试构造一棵哈夫曼树,则其加权路径长度WPL为_(1) 80__,字符c的编码是_(2) 001(不唯一)__。

39.下面是求二叉树高度的类C写的递归算法试补充完整。二叉树的两指针域为lchild与rchild, 算法中p为二叉树的根,lh和rh分别为以p为根的二叉树的左子树和右子树的高,hi为以p为根的二叉树的高,hi最后返回。

height(p)

{if ((1) p ___)

{if(p->lchild==null) lh=(2)_ 0______; else  lh=(3)_ height(p->lchild)______;

if(p->rchild==null) rh=(4)_ 0______; else  rh=(5)_ height(p->rchild)______;

if (lh>rh) hi=(6) lh+1__;else  hi=(7)_ rh+1______;

}

else   hi=(8) 0_______;

return    hi;

}//

40.二叉树用二叉链表存储,以下程序为求二叉树深度的递归算法,请填空完善之。

int depth(bitree bt)   /*bt为根结点的指针*/

{int hl,hr;

if (bt==NULL) return((1) 0 ___);

hl=depth(bt->lchild); hr=depth(bt->rchild);

if((2) hl>hr ___)  (3)_ hr=hl ____;

return(hr+1);

}

三、判断题

1.二叉树是一般树的特殊情形。×

2.由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法( X )

3.二叉树中每个结点至多有两个子结点,而对一般树则无此限制.因此,二叉树是树的特殊情形. ×

4.树形结构中元素之间存在一个对多个的关系。√

5.二叉树是度为2的有序树。×

6.如果二叉树中某结点的度为1,则说该结点只有一棵子树( √ )

7.深度为K的二叉树中结点总数≤2k-1。√

8.完全二叉树中,若一个结点没有左孩子,则它必是树叶。√

9.对于有N个结点的二叉树,其高度为log2n。×

10.深度为k具有n个结点的完全二叉树,其编号最小的结点序号为 ë2k-2û+1。×

11.用一维数组存储二叉树时,总是以前序遍历顺序存储结点。×

12.完全二叉树的存储结构通常采用顺序存储结构。√

13.二叉树只能用二叉链表表示。

14.用链表存储包含n个结点的二叉树,结点的2n个指针区域中有n-1个空指针。×

15.二叉树的遍历结果不是唯一的. √

只有在确定何序(前序、中序、后序或层次)遍历后,遍历结果才唯一。

16.二叉树的遍历只是为了在应用中找到一种线性次序。√

17.二叉树的前序遍历序列中,任意一个结点均处在其孩子结点的前面,这种说法( √ )

18.非空的二叉树一定满足:某结点若有左孩子,则其中序前驱一定没有右孩子√

其中序前驱是其左子树上按中序遍历的最右边的结点(叶子或无右子女),该结点无右孩子。

19.由一棵二叉树的前序序列和后序序列可以唯一确定它。×

20.在中序线索二叉树中,每一非空的线索均指向其祖先结点。√

在二叉树上,对有左右子女的结点,其中序前驱是其左子树上按中序遍历的最右边的结点(该结点的后继指针指向祖先),中序后继是其右子树上按中序遍历的最左边的结点(该结点的前驱指针指向祖先)。

21.线索二叉树的优点是便于是在中序下查找前驱结点和后继结点。√

22.二叉树中序线索化后,不存在空指针域。×

非空二叉树中序遍历第一个结点无前驱,最后一个结点无后继,这两个结点的前驱线索和后继线索为空指针。

23.给定一棵树,可以找到唯一的一棵二叉树与之对应。√

24.必须把一般树转换成二叉树后才能进行存储。×

25.将一棵树转成二叉树,根结点没有左子树;×

26.采用二叉链表作存储结构,树的前序遍历和其相应的二叉树的前序遍历的结果是一样的。√

27.一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。×

28.一棵树中的叶子数一定等于与其对应的二叉树的叶子数。×

29.在叶子数目和权值相同的所有二叉树中,最优二叉树一定是完全二叉树,该说法(  X)。

30.在二叉树中插入结点,则它不再是二叉树了。×

31.哈夫曼树的结点个数不能是偶数。√

32.一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和。×

33.当一棵具有n个叶子结点的二叉树的WPL值为最小时,称其树为Huffman树,且其二叉树的形状必是唯一的。×

四.解答应用题

1. 一棵二叉树中的结点的度或为0或为2,则二叉树的枝数为2(n0-1),其中n0是度为0的结点的个数。

证明:设二叉树度为0和2的结点数及总的结点数分别为n0,n2 和n,

则n=n0+n2  … (1)

再设二叉树的分支数为B, 除根结点外,每个结点都有一个分支所指,

则   n=B+1…  … …(2)

度为零的结点是叶子,没有分支,而度为2的结点有两个分支,因此(2)式可写为

n=2*n2+1         ……………(3)

由(1)、(3)得n2=n0-1,代入(1),并由(1)和(2)得B=2*(n0-1)。 证毕。

2.任意一个有n个结点的二叉树,已知它有m个叶子结点,试证明非叶子结点有(m-1)个度为2,其余度为1。

证明:设度为1和2 的结点数是n1和n2,则二叉树结点数n为n=m+n1+n2………… (1)

由于二叉树根结点没有分枝所指,度为1和2的结点各有1个和2个分枝,度为0 的结点没有分枝,故二叉树的结点数n与分枝数B有如下关系

n=B+1=n1+2*n2+1……………………….(2)

由(1)和(2),得n2=m-1。即n个结点的二叉树,若叶子结点数是m,则非叶子结点中有(m-1)个度为2,其余度为1。

3.一棵非空的二叉树其先序序列和后序序列正好相反,画出这棵二叉树的形状。

先序序列是“根左右” 后序序列是“左右根”,可见对任意结点,若至多只有左子女或至多只有右子女,均可使前序序列与后序序列相反,图示如下:

               
               
 
 

4.画出同时满足下列两条件的两棵不同的二叉树。

(1)按先根序遍历二叉树顺序为ABCDE。

(2)高度为5其对应的树(森林)的高度最大为4。

       
   
     
 

5.已知二叉树的先序、中序和后序遍历序列分别如下(但其中一些模糊不清)

先序: ABC__EF__ __

中序: BDE__AG__ H

后序: _DC__GH__ __

要求:

(1)补充模糊的地方,并重新写出先序、中序和后序遍历序列

(2)画出该二叉树

(3)画出该二叉树的中序线索树

(4)画出该二叉树对应的森林

(5)画出森林中第一棵树的孩子兄弟表示法

答案:

(1)先序:ABCDEFGH;
中序BDECAGFH; EDCBGHFA

(2)二叉树:                               (4)森林:

五、算法设计

1.二叉树用二叉链表存储,编写算法求二叉树度为1的结点

(1)给出二叉链表的类型定义

(2)用类C语言写出递归算法

类型定义:

typedef struct BiTNode
{

TElemType      data;

struct BiTNode  *lchild, *rchild;

} BiTNode, *BiTree;

int num(BiTree T)

{  if(!T)return 0;

else{

nl=num(T->lchild);

nr=num(T->rchild);

if(T->lchild&&!T->rchild||!
T->lchild&&T->rchild)return nl+nr+1;else return nl+nr;

}

}

2.编写算法以中序编立的顺序给出每个结点以及该结点的层次(二叉树用二叉链表存储,类型定义如(1))

void  inorder (BiTree T,int
l)

{    if (T) {

inorder(T->lchild,l+1);

printf(“%c,%d”
,T->data,l);

inorder(T->rchild,l+1);

}

}

时间: 2024-10-09 20:56:21

数据结构第二单元练习题答案的相关文章

第二单元练习题

<<<第二单元练习>>> 1.用命令和正则表达式按照要求建立文件 *)用一条命令建立12个文件WESTOS_classX_linuxY(X的数值范围为1-2,Y的数值范围为1-6) *)这些文件都包含在root用户桌面的study目录中 *)用一条命令建立8个文件redhat_versionX(x的范围为1-8) *)redhat_virsionX这些文件都包含在/mnt目录中的VERSION中 2.管理刚才信建立的文件要求如下 *)用一条命令把redhat_versi

Java编程思想第四版第二章练习题答案

练习1:创建一个类,它包含一个int域和一个char域,它们都没有被初始化.将他们的值打印出来,以验证Java执行了默认初始化 public class JavaThinking { private static int i; private static char c; public static void main(String[] args){ System.out.println(i); System.out.println(c); //这里char的默认值为'\u0000'可以这样输出

python核心编程第二版练习题答案

2-5 #写一个while循环,输出整型为0~10 a=0while a<11: print a a+=1 #写一个for循环重复以上操作 for i in range(11): print i 2-6 #条件判断,判断一个数正数还是负数,或者是0.开始先用固定的数值,然后修改你的代码支持用户输入数值进行判断 a=int(raw_input("please input a number:"))#a=6if a>0: print"this number is pos

LINUX REDHAT第二单元练习题

1.用命令和正则表达式按照要求建立文件*)用一条命令建立12个文件WESTOS_classX_linuxY(X的数值范围为1-2,Y的数值范围为1-6)*)这些文件都包含在root用户桌面的study目录中*)用一条命令建立8个文件redhat_versionX(x的范围为1-8) *)redhat_virsionX这些文件都包含在/mnt目录中的VERSION中 输入命令mkdir /root/Desktop/study;touch study/WESTOS-class{1..2}-linux

刘汝佳算法竞赛入门经典 第二单元习题答案自编

欢迎交流讨论! @2-1 #include <fstream> using namespace std; ifstream fin("aplusb.in"); ofstream fout("aplusb.out"); int main(){ int n; while(fin>>n){ int count = 0; //计算位数 while(n){ count++; n /= 10; } fout << count <<

前四单元练习题

##################练习题################ <<<第一单元练习题>>> 1.用student用户登陆系统图形界面 2.打开一个bash 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) 4.显示当前系统时间 5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识) 6.显示"/usr/bin/clean-binary-

第 1 2 4 单元练习题作业

<<<第一单元练习题>>> 1.用student用户登陆系统图形界面 2.打开一个bash 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) 4.显示当前系统时间 date 5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识) date +%r 6.显示"/usr/bin/clean-binary-files"的文件类型 file /u

一,二,四(1)单元练习题

<<<第一单元练习题>>>1.用student用户登陆系统图形界面2.打开一个bash3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字)4.显示当前系统时间5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识)6.显示"/usr/bin/clean-binary-files"的文件类型7.统计"/usr/bin/clean-bin

LINUX 1-4单元练习题

<<<第一单元练习题>>> 1.用student用户登陆系统图形界面 2.打开一个bash 3.修改student的密码,把密码更新成"T3st1ngtlme"(主机字母和数字) 4.显示当前系统时间 5.显示当前系统时间,显示格式为:"小时:分钟:秒 AM/PM"(AM/PM为上下午标识) 6.显示"/usr/bin/clean-binary-files"的文件类型 7.统计"/usr/bin/cl