数据结构第六章考试题库(含答案)

更新时间:2024-04-19 16:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第六章 树和二叉树

一、选择题

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

A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE 【北京航空航天大学 1999 一、3 (2分)】

2.算术表达式a+b*(c+d/e)转为后缀表达式后为( )【中山大学 1999 一、5】

A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++ / 3. 设有一表示算术表达式的二叉树(见下图),

+ 它所表示的算术表达式是( ) + 【南京理工大学1999 一、20(2分)】 * C - * A. A*B+C/(D*E)+(F-G) B. (A*B+C)/(D*E)+(F-G)

D E F G A B C. (A*B+C)/(D*E+(F-G)) D. A*B+C/D*E+F-G

4. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( )

A.5 B.6 C.7 D.8 【南京理工大学 2000 一、8 (1.5分)】 5. 在下述结论中,正确的是( )【南京理工大学 1999 一、4 (1分)】

①只有一个结点的二叉树的度为0; ②二叉树的度为2; ③二叉树的左右子树可任意交换; ④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。 A.①②③ B.②③④ C.②④ D.①④

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

A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定 【南京理工大学2000 一、17(1.5分)】 7. 树是结点的有限集合,它( (1))根结点,记为T。其余结点分成为m(m>0)个((2))的集合T1,T2, ?,Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点(1≤i≤m)。一个结点的子结点个数称为该结点的( (3) )。二叉树与树是两个不同的概念,二叉树也是结点的有限集合,它((4))根结点。可以把树的根结点的层数定义为1,其他结点的层数等于其父结点所在层数加上1。令T是一棵二叉树,Ki和Kj是T中子结点数小于2的结点中的任意两个,它们所在的层数分别为λKi和λKj,当关系式│λKi-λKj│≤1一定成立时,则称T为一棵((5))。供选择的答案:

(1)(4) A. 有0个或1个 B. 有0个或多个 C. 有且只有一个 D. 有1个或1个以上 (2) A. 互不相交 B.允许相交 C.允许叶结点相交 D.允许树枝结点相交 (3) A. 权 B.维数 C.次数 D.序

(5) A. 丰满树 B.查找树 C.平衡树 D.完全树 【上海海运学院1999二、2(5分)】 8.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )

A.9 B.11 C.15 D.不确定 【北京工商大学2001一.7(3分)】

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

A.4 B.5 C.6 D.7 【哈尔滨工业大学 2001 二、2 (2分)】

10.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是( )。【北方交通大学 2001 一、16 (2分)】

A.M1 B.M1+M2 C.M3 D.M2+M3 11.具有10个叶结点的二叉树中有( )个度为2的结点,【北京航空航天大学2000 一、5(2分)】

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

12.一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )【西安交通大学 1996 三、2 (3分)】

A. 250 B. 500 C.254 D.505 E.以上答案都不对

13. 设给定权值总数有n 个,其哈夫曼树的结点总数为( ) 【福州大学 1998 一、5 (2分)】

A.不确定 B.2n C.2n+1 D.2n-1 14. 有n个叶子的哈夫曼树的结点总数为( )。【青岛大学 2002 二、1 (2分)】

A.不确定 B.2n C.2n+1 D.2n-1 15.若度为m的哈夫曼树中,其叶结点个数为n,则非叶结点的个数为( )。【中科院计算所1999一、2(2分)】

A.n-1 B.?n/m?-1 C.?(n-1)/(m-1)? D. ?n/(m-1)?-1 E.?(n+1)/(m+1)?-1 16. 有关二叉树下列说法正确的是( )【南京理工大学 2000 一、11 (1.5分)】

A.二叉树的度为2 B.一棵二叉树的度可以小于2 C.二叉树中至少有一个结点的度为2 D.二叉树中任何一个结点的度都为2 17.二叉树的第I层上最多含有结点数为( ) 【中山大学1998二、7 (2分)】【北京理工大学 2001 六、5(2分)】

I I-1I-1I

A.2 B. 2-1 C. 2 D.2 -1 18. 一个具有1025个结点的二叉树的高h为( )【南京理工大学 1999 一、19 (2分)】

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

19.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点

A.2h B.2h-1 C.2h+1 D.h+1 【南京理工大学2001一、11(1.5分)】 20.对于有n 个结点的二叉树, 其高度为( )【武汉交通科技大学 1996 一、5 (4分)】

A.nlog2n B.log2n C.?log2n?|+1 D.不确定 21. 一棵具有 n个结点的完全二叉树的树高度(深度)是( )【南京理工大学 1996一、8 (2分)】

A.?logn?+1 B.logn+1 C.?logn? D.logn-1

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

k-1 kh-1h

A.m B.m-1 C.m D.m-1 23.在一棵高度为k的满二叉树中,结点总数为( )【北京工商大学 2001 一、3 (3分)】

k-1 k kk

A.2B.2C.2-1 D.?log2?+1 24.高度为 K的二叉树最大的结点数为( )。【山东大学 2001 二、3 (1分)】

kk-1kk-1

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

25. 一棵树高为K的完全二叉树至少有( )个结点【南京理工大学 1998 一、3 (2分)】

kk-1k-1k

A.2 –1 B. 2 –1 C. 2 D. 2

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

A.4 B.5 C.6 D.7 【南京理工大学2000一、5 1.5分)】 27. 利用二叉链表存储树,则根结点的右指针是( )。【青岛大学 2001 五、5 (2分)】

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

28.对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( )次序的遍历实现编号。【北京理工大学 2000 一、4 (2分)】

A.先序 B. 中序 C. 后序 D. 从根开始按层次遍历

29.树的后根遍历序列等同于该树对应的二叉树的( ). 【北京理工大学 2001 六、6 (2分)】

A. 先序序列 B. 中序序列 C. 后序序列

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

A.前序 B.中序 C.后序 D.按层次【北京航空航天大学 1999 一、4 (2分)】 31.在下列存储形式中,哪一个不是树的存储形式?( )【北方交通大学 2001 一、23 (2分)】

A.双亲表示法 B.孩子链表表示法 C.孩子兄弟表示法 D.顺序存储表示法 32.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是( )【北京工业大学 2001 一、2 (2分)】

A.CABDEFG B.ABCDEFG C.DACEFBG D.ADCFEG

33.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( )。

A.CBEFDA B. FEDCBA C. CBEDFA D.不定 【浙江大学 1999 四、2 ( 4分)】 34.已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( )。

A.acbed B.decab C.deabc D.cedba 【山东大学 2001 二、7 ( 1分)】 35. 某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E 则前序序列是:

A.E,G,F,A,C,D,B B.E,A,C,B,D,G,F C.E,A,G,C,F,B,D D.上面的都不对 【南京理工大学 2000 一、14 (1.5分)】

36. 上题的二叉树对应的森林包括多少棵树( )【南京理工大学 2000 一、15 (1.5分)】

A.l B.2 C.3 D.概念上是错误的

37.二叉树的先序遍历和中序遍历如下: 先序遍历:EFHIGJK;中序遍历: HFIEJKG 。该二叉树根的右子

树的根是:【北方交通大学 2001 一、21(2分)】

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

38.将一棵树t 转换为孩子—兄弟链表表示的二叉树h,则t的后根序遍历是h 的

A.前序遍历 B.中序遍历 C.后序遍历( ) 【北京邮电大学 2001 一、2 (2分)】 39. 某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,? ,n,且有如下性质:T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。这时是按( )编号的。

A.中序遍历序列 B.前序遍历序列 C.后序遍历序列 D.层次顺序 【长沙铁道学院1998三、1(2分)】 40.下面的说法中正确的是( ).

(1)任何一棵二叉树的叶子结点在三种遍历中的相对次序不变; (2)按二叉树定义,具有三个结点的二叉树共有6种。

A.(1)(2) B.(1) C.(2) D.(1)、(2)都错 【南京理工大学 2001 一、10 (1.5分)】 41.对于前序遍历与中序遍历结果相同的二叉树为(1);

对于前序遍历和后序遍历结果相同的二叉树为(2)。【中科院计算所 1999 一、4 (4分)】 A.一般二叉树 B.只有根结点的二叉树 C.根结点无左孩子的二叉树

D.根结点无右孩子的二叉树 E.所有结点只有左子数的二叉树 F.所有结点只有右子树的二叉树 42.一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )

【南开大学 2000 一、2】

A.所有的结点均无左孩子B.所有的结点均无右孩子C.只有一个叶子结点D.是任意一棵二叉树 43.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( )

A.都不相同 B.完全相同 C.先序和中序相同,而与后序不同

D.中序和后序相同,而与先序不同 【北方交通大学 2001 一、25 (2分)】 44.某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。【武汉大学2000二、4】

A.空或只有一个结点 B.任一结点无左子树 C.高度等于其结点数 D.任一结点无右子树 45.在完全二叉树中,若一个结点是叶结点,则它没( )。【北方交通大学 2001 一、22 (2分)】 A.左子结点 B.右子结点 C.左子结点和右子结点 D.左子结点,右子结点和兄弟结点 46.在下列情况中,可称为二叉树的是( )

A.每个结点至多有两棵子树的树 B. 哈夫曼树 C.每个结点至多有两棵子树的有序树 D. 每个结点只有一棵右子树 E.以上答案都不对 【西安交通大学 1996 三、4 (3分)】

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

A.不确定 B. 0 C. 1 D. 2 【合肥工业大学 1999 一、5 (2分)】 48. 一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:( )。

A. 0 B. 1 C. 2 D. 不确定 【合肥工业大学 2000 一、5 (2分)】 49. 若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为( )

【南京理工大学1996 一、6 (2分)】

A.X的双亲 B.X的右子树中最左的结点 C.X的左子树中最右结点 D.X的左子树中最右叶结点 50. 引入二叉线索树的目的是( )

A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除

C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一 【南京理工大学1998 一、5 (2分)】 51. 线索二叉树是一种( )结构。

A. 逻辑 B. 逻辑和存储 C. 物理 D.线性 【西安电子科技大学1996 一、9 (2分)】 52.n个结点的线索二叉树上含有的线索数为( )

A.2n B.n-l C.n+l D.n 【中山大学 1998 二、8 (2分)】 53.( )的遍历仍需要栈的支持.

A.前序线索树 B.中序线索树 C.后序线索树 【中科院计算所 1999 一、1 (2分)】 54.二叉树在线索后,仍不能有效求解的问题是( )。

A.前(先)序线索二叉树中求前(先)序后继 B.中序线索二叉树中求中序后继

C.中序线索二叉树中求中序前驱 D.后序线索二叉树中求后序后继 【武汉大学2000 二、3 二、5】 55. 设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( )个。

A. n-1 B.n C. n+1 D. n+2 【西安电子科技大学1998 一、10 (2分)】

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

A.先序 B.中序 C.后序 D.层次序 【西安电子科技大学1996 一、2 (2分)】 57. 由3 个结点可以构造出多少种不同的有向树?( )

A.2 B.3 C.4 D.5 【北方交通大学 2001 一、6 (2分)】 58.由3 个结点可以构造出多少种不同的二叉树?( )

A.2 B.3 C.4 D.5 【北方交通大学 2001 一、7 (2分)】

59.下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序()。

A.二叉排序树 B.哈夫曼树 C.AVL树 D.堆 【中国科技大学1998二、8(2分)】【中科院计算所1998二、8(2分)】

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

A.正确 B.错误 【中国科技大学1998 二、10(2分)】【中科院计算所1998 二、10(2分)】

61.最优二叉树(哈夫曼树)、最优查找树均为平均查找路径长度最小的树,其中对最优二叉树,n

表示(1),对最优查找树,n表示(2),构造这两种树均(3)。【中科院计算所1999一、3 (6分)】

A.结点数 B.叶结点数 C.非叶结点数 D.度为2的结点数 E.需要一张n个关键字的有序表 F.需要对n个关键字进行动态插入 G.需要n个关键字的查找概率表 H.不需要任何前提 62.下述编码中哪一个不是前缀码( )。【中科院计算所 2000 一、2 (2分)】

A.(00,01,10,11) B.(0,1,00,11) C.(0,10,110,111) D.(1,01,000,001) 63.下面几个符号串编码集合中,不是前缀编码的是( )。

A.{0,10,110,1111} B.{11,10,001,101,0001} C.{00,010,0110,1000} D.{b,c,aa,ac,aba,abb,abc} 【西安电子科技大学2001 应用 一、6(2分)】

64. 当一棵有n个结点的二叉树按层次从上到下,同层次从左到右将数据存放在一维数组 A[l..n]中时,数组中第i个结点的左孩子为( )【南京理工大学 1999一、18(2分)】

A.A[2i](2i=

65. 一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是( )

A.A[2i](2i<=n) B.A[2i+1](2i+1<=n) C.A[i-2] D.条件不充分,无法确定 【南京理工大学2000 一、4(1.5分)】

66.从下列有关树的叙述中,选出5条正确的叙述(共5分) ( )

A.二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况。

k-1

B.当K≥1时高度为K的二叉树至多有2个结点。 C.用树的前序周游和中序周游可以导出树的后序周游。

D.线索二叉树的优点是便于在中序下查找前驱结点和后继结点。 E.将一棵树转换成二叉树后,根结点没有左子树。

F.一棵含有N个结点的完全二叉树,它的高度是?LOG2N?+1。 G.在二叉树中插入结点,该二叉树便不再是二叉树。

H.采用二叉树链表作树的存储结构,树的前序周游和其相应的二叉树的前序周游的结果是一样的。 I.哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。 J.用一维数组存储二叉树时,总是以前序周游存储结点。【山东工业大学 1995 三、 (5分)】

二、判断题

1. 二叉树是度为2的有序树。【长沙铁道学院1997一、3(1分)】【中科院软件所1997一、9(1分)】 2. 完全二叉树一定存在度为1的结点。【青岛大学 2002 一、4 (1分)】 3. 对于有N个结点的二叉树,其高度为log2n。【上海海运学院 1998 一、6 (1分)】

k

4.深度为K的二叉树中结点总数≤2-1。【南京航空航天大学 1995 五、1 (1分)】 5. 二叉树以后序遍历序列与前序遍历序列反映的同样的信息(他们反映的信息不独立)。

【华南理工大学2002一、7 (1分)】

6. 二叉树的遍历结果不是唯一的.【南京理工大学 1997 二、8 (2分)】 7. 二叉树的遍历只是为了在应用中找到一种线性次序。【青岛大学 2001 四、4 (1分)】

8. 树可用投影法进行中序遍历。 【青岛大学 2002 一、6 (1分)】

9. 一个树的叶结点,在前序遍历和后序遍历下,皆以相同的相对位置出现。

【上海海运学院 1995 一、4 (1分)】

10. 二叉树的前序遍历并不能唯一确定这棵树,但是,如果我们还知道该树的根结点是那一个,则可以确定这棵二叉树。【上海海运学院 1995 一、6 (1分)】

11. 一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。【上海海运学院 1996 一、6 (1分)】

12.对一棵二叉树进行层次遍历时,应借助于一个栈。【南京航空航天大学 1995 五、3 (1分)】 13.用树的前序遍历和中序遍历可以导出树的后序遍历。【北京邮电大学 1999 二、3 (2分)】 14.采用二叉链表作存储结构,树的前序遍历和其相应的二叉树的前序遍历的结果是一样的。

【北京邮电大学2000一、2(1分)】

15. 用一维数组存储二叉树时,总是以前序遍历顺序存储结点。【上海海运学院 1995 一、8 (1分)】 16. 中序遍历二叉链存储的二叉树时,一般要用堆栈;中序遍历检索二叉树时,也必须使用堆栈。

【上海海运学院1998一、7(1分)】

17.中序遍历一棵二叉排序树的结点就可得到排好序的结点序列【中科院软件所 1999 六、1-1 (2分)】 18. 后序线索二叉树是不完善的,要对它进行遍历,还需要使用栈。【 长沙铁道学院 1998 一、2 (1分)】 19.任何二叉树的后序线索树进行后序遍历时都必须用栈。【西安交通大学 1996 二、2 ( 3分) 】 20.任何一棵二叉树都可以不用栈实现前序线索树的前序遍历。【西安交通大学 1996 二、1 (3分)】 21.由一棵二叉树的前序序列和后序序列可以唯一确定它。【中科院软件所 1997 一、3 (1分)】 22.完全二叉树中,若一个结点没有左孩子,则它必是树叶。

【东南大学 2001一、1-8(1分)】【中科院软件所1997一、2(1分)】【山东大学2001一、4 (1分)】 23. 二叉树只能用二叉链表表示。【南京理工大学 1997 二、6 (2分)】

24. 一棵有n个结点的二叉树,从上到下,从左到右用自然数依次给予编号,则编号为i的结点的左儿子的编号为2i(2i< n),右儿子是2i+1(2i+1

【上海海运学院1996一.5(1分)】

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

【上海海运学院1997一.5(1分)】

29.树形结构中元素之间存在一个对多个的关系。【燕山大学 1998 二、1 (2分)】

i-1

30.在二叉树的第i层上至少有2个结点(i>=1)。【燕山大学 1998 二、3 (2分)】 31.必须把一般树转换成二叉树后才能进行存储。【南京航空航天大学 1997 一、4 (1分)】 32.完全二叉树的存储结构通常采用顺序存储结构。【南京航空航天大学 1996 六、3 (1分)】 33.将一棵树转成二叉树,根结点没有左子树;【北京邮电大学 1999 二、2 (2分)】 34.在二叉树中插入结点,则此二叉树便不再是二叉树了。【北京邮电大学 2000 一、5 (1分)】 35.二叉树是一般树的特殊情形。【北京邮电大学 2000 一、9 (1分) 2002 一、6 (1分)】 36.树与二叉树是两种不同的树型结构。【东南大学 2001 一、1-7 (1分)】 37. 非空的二叉树一定满足:某结点若有左孩子,则其中序前驱一定没有右孩子

【合肥工业大学 2001 二、5 (1分)】

38.在任意一棵非空二叉排序树,删除某结点后又将其插入,则所得二叉排序树与删除前原二叉排序树相同。【中科院软件所 1997 一、7 (1分)】 39.度为二的树就是二叉树。【大连海事大学 2001 一、7 (1分)】

k-2

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

【东北大学 1997 二、3 (2分)】

41.下面二叉树的定义只有一个是正确的,请在正确的地方画“√”。

(1)它是由一个根和两株互不相交的、称为左子树和右子树的二叉树组成。

i-1

(2)(a)在一株二叉树的级i上,最大结点数是2(i≥1)

k-1

(b)在一棵深度为k的二叉树中,最大结点数是2+1(k≥1)。 (3)二叉树是结点的集合,满足如下条件: (a)它或者是空集;

(b)或者是由一个根和两个互不相交的、称为左子树和右子树的二叉树组成。 【中科院自动化所1995一、2(6分)】

42. 在中序线索二叉树中,每一非空的线索均指向其祖先结点。【合肥工业大学 2000 二、5 (1分)】 43. 线索二叉树的优点是便于是在中序下查找前驱结点和后继结点。

【上海海运学院1995 ,96,97 一、7(1分)】 44. 二叉树中序线索化后,不存在空指针域。【青岛大学 2000 四、3 (1分)】 45.霍夫曼树的结点个数不能是偶数。【北京邮电大学 2000 一、6 (1分)】 46. 一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和。【合肥工业大学2000二、4 (1分)】 47. 哈夫曼树无左右子树之分。【青岛大学 2000 四、8 (1分)】

48.当一棵具有n个叶子结点的二叉树的WPL值为最小时,称其树为Huffman树,且其二叉树的形状必是唯一的。【南京航空航天大学 1995 五、6 (1分)】

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

【北京邮电大学 1999 二、5 (2分)】

50. 用链表(llink-rlink)存储包含n个结点的二叉树时,结点的2n个指针区域中有n+1个空指针。( )

【上海海运学院 1999 一、6(1分)】

三、填空题

1.二叉树由_(1)__,__(2)_,_(3)__三个基本单元组成。【燕山大学 1998 一、5 (3分)】 2.树在计算机内的表示方式有_(1)__,_(2)__,_(3)__。【哈尔滨工业大学 2000 二、4 (3分)】 3.在二叉树中,指针p所指结点为叶子结点的条件是______。【合肥工业大学1999 三、7(2分)】

4.中缀式a+b*3+4*(c-d)对应的前缀式为__(1)_,若a=1,b=2,c=3,d=4,则后缀式db/cc*a-b*+的运算结果为_(2)__。【西南交通大学 2000 一、6】

5.二叉树中某一结点左子树的深度减去右子树的深度称为该结点的____。【燕山大学1998一、9(1分)】 6.具有256个结点的完全二叉树的深度为______。【燕山大学 1998 一、4 (1分)】

7.已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则该树有______个叶子结点。【厦门大学 2000 六、2 (16%/3分)】

8.深度为k的完全二叉树至少有___(1)____个结点,至多有___(2)____个结点。

【厦门大学 2001 一、4 (14%/5分)】 【南京理工大学 1999 二、5 (4分)】 9.深度为H 的完全二叉树至少有_(1)__个结点;至多有_(2)__个结点;H和结点总数N之间的关系是 (3)__。

【中科院计算所1998 一、3(3分)1999 二、4(3分)】【中国科技大学 1998 一、3(4分)】 10.在顺序存储的二叉树中,编号为i和j的两个结点处在同一层的条件是______。

【厦门大学 2002 六、3 (4分)】

11.在完全二叉树中,编号为i和j的两个结点处于同一层的条件是______。

【合肥工业大学 2000 三、6 (2分)】

12.一棵有n个结点的满二叉树有__(1)_个度为1的结点、有__(2)_个分支 (非 终端)结点和__(3)_个叶子,该满二叉树的深度为_(4)__。【华中理工大学 2000 一、6 (3分)) 13.假设根结点的层数为1,具有n个结点的二叉树的最大高度是______。

【北方交通大学 2001 二、1】

14.在一棵二叉树中,度为零的结点的个数为N0,度为2的结点的个数为N2,则有N0 =______

【北方交通大学 2001 二、6】【南京理工大学 1999 二、4 (2分)】 15.设只含根结点的二叉树的高度为0,则高度为k的二叉树的最大结点数为______,最小结点数为______。【北京大学 1997 一、1 (4分)】

16.设有N个结点的完全二叉树顺序存放在向量A[1:N]中,其下标值最大的分支结点为______。

【 长沙铁道学院 1997 二、3 (2分)】

17.高度为K的完全二叉树至少有______个叶子结点。【合肥工业大学 1999 二、6(2分)】 18.高度为8的完全二叉树至少有______个叶子结点。【合肥工业大学 2001 三、6(2分)】 19.已知二叉树有50个叶子结点,则该二叉树的总结点数至少是______。

【厦门大学 2002 六、4(4分)】

20.一个有2001个结点的完全二叉树的高度为______。【南京理工大学 1997 三、2(1分)】

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

【南京理工大学 2000 二、9(3分)】

22.一个深度为k的,具有最少结点数的完全二叉树按层次,(同层次从左到右)用自然数依此对结点编号,则编号最小的叶子的序号是__(1)_;编号是i的结点所在的层次号是_(2)__(根所在的层次号规定为1层)。【南京理工大学 2001 二、2(2分)】

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

【南京理工大学 2001 二、3(2分)】

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

【西安电子科技大学1999软件 一、4(2分)】

25.高度为h的2-3树中叶子结点的数目至多为______。【西安电子科技大学1999软件 一、6(2分)】 26.完全二叉树中,结点个数为n,则编号最大的分支结点的编号为______。

【北京轻工业学院 2000 一、3 (2分)】

27.设一棵完全二叉树叶子结点数为k,最后一层结点数>2,则该二叉树的高度为______。

【北京科技大学 1998 一、3】

28.对于一个具有n个结点的二元树,当它为一棵_(1)_二元树时具有最小高度,当它为一棵_(2)_时,具有最大高度。【哈尔滨工业大学 2001 一、3 (2分)】

29.具有N个结点的二叉树,采用二叉链表存储,共有______个空链域。【重庆大学 2000 一、8】 30.8层完全二叉树至少有______个结点,拥有100个结点的完全二叉树的最大层数为______。

【西南交通大学 2000 一、1】

31.含4个度为2的结点和5个叶子结点的二叉树,可有______个度为1的结点。

【北京工业大学 2001 一、6 (2分)】

32.一棵树T中,包括一个度为1的结点,两个度为2的结点,三个度为3的结点,四个度为4的结点和若干叶子结点,则T的叶结点数为______。【山东大学 2001 三、2 (2分)】

33. n(n大于1)个结点的各棵树中,其深度最小的那棵树的深度是_(1)__。它共有_(2)__个叶子结点和_(3)__个非叶子结点,其中深度最大的那棵树的深度是_(4)__,它共有_(5)__个叶子结点和_(6)__个非叶子结点。【山东大学 2001 三、7 (2分)】

34. 每一棵树都能唯一的转换为它所对应的二叉树。若已知一棵二叉树的前序序列是BEFCGDH,对称序列是FEBGCHD,则它的后序序列是_(1)__。设上述二叉树是由某棵树转换而成,则该树的先根次序序列是_(2)__。【山东工业大学 1997 二、 (6分)】

35.先根次序周游树林正好等同于按_(1)__周游对应的二叉树,后根次序周游树林正好等同于按__(2)_周游对应的二叉树。【山东工业大学 1999 二、1 (4分)】 36.二叉树结点的对称序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E,则该二叉树结点的前序序列为_(1)__,则该二叉树对应的树林包括_(2)__棵树。【北京大学 1997 一、2 (4分)】

37.二叉树的先序序列和中序序列相同的条件是______。 【合肥工业大学 2000 三、7(2分)】

38.已知一棵二叉树的前序序列为abdecfhg,中序序列为dbeahfcg,则该二叉树的根为_(1)__,左子树中有_(2)__, 右子树中有_(3)__。【南京理工大学 1996 二、1(6分)】

39.设二叉树中每个结点均用一个字母表示,若一个结点的左子树或右子树为空,用 .表示,现前序遍历二叉树,访问的结点的序列为ABD.G...CE.H..F..,则中序遍历二叉树时,访问的结点序列为_(1)__;后序遍历二叉树时,访问的结点序列为_(2)__。【南京理工大学 1999 二、3(4分)】 40.已知二叉树前序为ABDEGCF,中序为DBGEACF,则后序一定是____。【青岛大学2000 六、3(2分)】 41.现有按中序遍历二叉树的结果为abc,问有_(1)__种不同的二叉树可以得到这一遍历结果,这些二叉树分别是_(2)__。【中国矿业大学 2000 一、5(3分)】

42.一个无序序列可以通过构造一棵______树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。【西安电子科技大学1999软件 一、4(2分)】

43.利用树的孩子兄弟表示法存储,可以将一棵树转换为______。【重庆大学 2000 一、9】

44.若一个二叉树的叶子结点是某子树的中序遍历序列中的最后一个结点,则它必是该子树的______序列中的最后一个结点。【武汉大学 2000 一、2】

45.先根次序周游树林正好等同于按______周游对应的二叉树;后根次序周游树林正好等同于______周游对应的二叉树。【山东大学 1999 二、1 (4分)】

46. 在一棵存储结构为三叉链表的二叉树中,若有一个结点是它的双亲的左子女,且它的双亲有右子女,则这个结点在后序遍历中的后继结点是______。【中国人民大学 2001 一、4 (2分)】 47.一棵左子树为空的二叉树在先序线索化后,其中的空链域的个数为:______。

【厦门大学 2002 六、1 (4分)】

48.具有n个结点的满二叉树,其叶结点的个数是______。【北京大学 1994】

49.设一棵后序线索树的高是50,结点x是树中的一个结点,其双亲是结点y,y的右子树高度是31,x是y的左孩子。则确定x的后继最多需经过______中间结点(不含后继及x本身)

【南京理工大学 2000 二、8(1.5分)】

50.线索二元树的左线索指向其______,右线索指向其______。

【哈尔滨工业大学 2000 二、3 (2分)】

51.设y指向二叉线索树的一叶子,x指向一待插入结点,现x作为y的左孩子插入,树中标志域为ltag和rtag,并规定标志为1是线索,则下面的一段算法将x插入并修改相应的线索,试补充完整:(lchild,rchild分别代表左,右孩子)

x^.ltag:= (1)___; x^.lchild:= (2)___; y^.ltag:= (3)___; y^.lchild:= (4)___; x^.rtag:= (5)___; x^.rchild:= (6)___;

IF (x^.lchild<>NIL) AND (x^lchild^.rtag=1) THEN x^.lchild^.rchild:= (7)___; 【南京理工大学 1997 三、7 (9分)】 52.哈夫曼树是______。【北京理工大学 2001 七、4 (2)】【 长沙铁道学院 1998 二、3 (2分)】 53.若以{4,5,6,7,8}作为叶子结点的权值构造哈夫曼树,则其带权路径长度是______。

【西安电子科技大学2001软件 一、3 (2分)】【厦门大学 2002 六、2(4分)】

54.有数据WG={7,19,2,6,32,3,21,10},则所建Huffman树的树高是_(1)__,带权路径长度WPL为_(2)__。【南京理工大学 1999 三、6(4分)】

55.有一份电文中共使用 6个字符:a,b,c,d,e,f,它们的出现频率依次为2,3,4,7,8,9,试构造一棵哈夫曼树,则其加权路径长度WPL为_(1)__,字符c的编码是_(2)__。【中国矿业大学2000 一、7(3分)】 56.设n0为哈夫曼树的叶子结点数目,则该哈夫曼树共有______个结点。

【西安电子科技大学1999软件 一、2(2分)】

57.①二叉树用来表示表达式,因为需要保存各子树的值,修改二叉树的结点结构为(Lchild,Data,Val,Rchild)。其中Lchild,Rchild的意义同前,Val用来存放以该结点为根的子树的值,值的类型依具体情况而定。为了简便起见,算法假定所考虑的表达式只有+,-,*,/ 四种二目运算,且已表示成相应的二叉树。算法所计算的表达式值放在根结点的Val域中。 PROC Postorder-eval(t:ptrType) BEGIN IF (t!=NULL)

BEGIN (1)_______; (2)_______;

CASE t^.data:

‘+’: t^.Val:=t^. Lchild^. Val + t^. Rchild ^. Val; BREAK;

‘-’: t^.Val:=t^. Lchild^. Val - t^. Rchild ^. Val; BREAK; ‘*’: t^.Val:=t^. Lchild^. Val * t^. Rchild ^. Val; BREAK; ‘/’: t^.Val:=t^. Lchild^. Val / t^. Rchild ^. Val; BREAK; otherwise: (3)___; BREAK; ENDCASE END END;

②PROC Delete(x:datatype,A:tree) BEGIN tempA:= (4)___;

WHILE (tempA^.Item!=x) AND (tempA!=NULL) DO

IF (x

ELSE BEGIN r:=tempA;tempA:=tempA^.Rchild;END;//tempA为要删结点,r为tempA的父亲 IF (6)___ return(x);

IF (tempA^.Lchild!=NULL) AND (tempA^.rchild!=NULL) BEGIN t:=tempA; q:=tempA^.Rchild;

WHILE (q^.Lchild!=NULL) DO BEGIN t:=q; q:=q^.Lchild; END;

t^.Lchild:= (7)___; //删去q

q^.Lchild :=tempA^.Lchild; q^.Rchild:=tempA^.Rchild;

IF (tempA^.item< r^.item) r^.Lchild := (8)_ ELSE r^.Rchild:=q //用q代替 tempA

END;

ELSE IF(tempA^.Lchild!=NULL) IF(tempA^.item

ELSE r^.Rchild:=tempA^.Lchild

ELSE IF(tempA^.Rchild!=NULL) IF(tempA^.item

ELSE r^.Lchild:=tempA^.Rchild

ELSE //tempA为树叶

IF(10)_ r^.Lchild:=NULL ELSE r^.Rchild:=NULL END; 【中山大学 1999 四、 (20分)】 58.下面的类PASCAL语言递归算法的功能是判断一棵二叉树(采用二叉链表存贮结构)是否为完全二叉树。请把空缺的两部分补写完整。(提示:利用完全二叉树结点序号性质)

TYPE link=^node;

node=RECORD key:keytype; l,r:link; END;

VAR all:boolean; n:integer; root:link; FUNC num(t:link):integer; BEGIN (1)______END;

PROC chk(t:link;m{t 所指结点应有序号}:integer)

BEGIN (2)_______END;

BEGIN {建二叉树,其根由root指出 }

n:=num(root);{求结点数} all:=true; chk(root,1); IF all THEN writeln(‘该树为完全二叉树!’)ELSE writeln (’该树非完全二叉树!’)

END; 【北京工业大学 1997 二、2 (10分)】

59.将二叉树bt中每一个结点的左右子树互换的C语言算法如下,其中ADDQ(Q,bt),DELQ(Q),EMPTY(Q)分别为进队,出队和判别队列是否为空的函数,请填写算法中得空白处,完成其功能。

typedef struct node

{int data ; struct node *lchild, *rchild; }btnode; void EXCHANGE(btnode *bt) {btnode *p, *q;

if (bt){ADDQ(Q,bt);

while(!EMPTY(Q))

{p=DELQ(Q); q=(1)___; p->rchild=(2)___; (3)___=q;

if(p->lchild) (4)___; if(p->rchild) (5)___; }

} }//【北京科技大学 2000 二、(10分)】

60.设t是给定的一棵二叉树,下面的递归程序count(t)用于求得:二叉树t中具有非空的左,右两个儿子的结点个数N2;只有非空左儿子的个数NL;只有非空右儿子的结点个数NR和叶子结点个数N0。N2、NL、NR、N0都是全局量,且在调用count(t)之前都置为0. typedef struct node

{int data; struct node *lchild,*rchild;}node; int N2,NL,NR,N0; void count(node *t)

{if (t->lchild!=NULL) if (1)___ N2++; else NL++;

else if (2)___ NR++; else (3)__ ;

if(t->lchild!=NULL)(4)____; if (t->rchild!=NULL) (5)____; } /*call form :if(t!=NULL) count(t);*/ 【上海大学 2000 一、3 (10分)】

61.下面是求二叉树高度的类PASCAL(注:编者略)及类C写的递归算法试补充完整 [说明](1)考生可根据自己的情况任选一个做(都选不给分)

(2)二叉树的两指针域为lchild与rchild, 算法中p为二叉树的根,lh和rh分别为以p为根

的二叉树的左子树和右子树的高,hi为以p为根的二叉树的高,hi最后返回。

height(p)

{if ((1)___)

{if(p->lchild==null) lh=(2)_______; else lh=(3)_______;

if(p->rchild==null) rh=(4)_______; else rh=(5)_______; if (lh>rh) hi=(6)__;else hi=(7)_______; }

else hi=(8)_______; return hi;

}// 【南京理工大学 1997 三、8 (15分)】

62.二叉树以链方式存储,有三个域,数据域data,左右孩子域lchild,rchild。树根由tree指向 。现要求按层次从上到下,同层次从左到右遍历树。下面算法中用到addx(p),将指针p进队,delx( )将队头元素返回并退队,notempty在队不空时返回true,否则为false,将算法补充完整:

PROC processnode(p);

IF(1)_______THEN [write(p^.data); (2)_______ ] ENDP;

PROC trave(tree);

write(tree^.data); (3)_______; WHILE notempty() DO

[ r:=delx( ); processnode(r^.lchild); processnode((4)_______)] ENDP; 【南京理工大学 1999 三、5 (4分)】 63 阅读下列程序说明和程序,填充程序中的______

【程序说明】本程序完成将二叉树中左、右孩子交换的操作。交换的结果如下所示(编者略)。

本程序采用非递归的方法,设立一个堆栈stack存放还没有转换过的结点,它的栈顶指针为tp。交换左、右子树的算法为:

(1)把根结点放入堆栈。

(2)当堆栈不空时,取出栈顶元素,交换它的左、右子树,并把它的左、右子树分别入栈。 (3)重复(2)直到堆栈为空时为止。 typedef struct node *tree;

struct node{int data; tree lchild,rchild;} exchange(tree t)

{tree r,p; tree stack [500]; int tp=0; (1)_______ while (tp>=0)

{(2)_______

if((3)_______)

{r=p->lchild; p->lchild=p->rchild; p->rchild=r

stack[(4)_______]=p->lchild; stack[++tp]=p->rchild;

}

}} 【中科院自动化研究所 1994 二、2 (15分)】

64.下面使用类pascal语言写的对二叉树进行操作的算法,请仔细阅读

TYPE pointer=^tnodetp;

tnodetp=RECORD data: char; llink,rlink: pointer;END; linkstack=^linknodet;

linknodet=RECORD data:pointer; next;linkstack;END; PROC unknown (VAR t:pointer); VAR p,temp:pointer; BEGIN p:=t;

IF p<> NIL THEN

[temp:=p^.llink ;p^.llink:=p^.rlink;;p^.rlink:=temp; unknown(p^.llink); unknown(p^.rlink); ]

END;

① 指出该算法完成了什么功能

② 用栈将以上算法改为非递归算法unknown1,其中有若干语句或条件空缺请在空缺处填写上适当的语句或条件

PROC inistack(VAR s:linkstack); (1)_______; s^.next:=NIL; ENDP;

FUNC empty (s:linkstack):boolean;

IF (2)_______THEN empty:=true ELSE empty:=false; ENDF;

FUNC gettop(s:linkstack):pointer; gettop:= (3)_______; ENDF;

FUNC pop(VAR s:linkstack):pointer; VAR p:linkstack;

pop:=s^.next^.data; p:=s^.next; (4)_______;(5)_______; ENDF;

PROC push (VAR s:linkstack;x:pointer); VAR p:linkstack;

new(p); p^.data:=x; (6)_______; s^.next:=p; ENDP;

PROC unknown1(VAR t:pointer);

VAR p,temp: pointer; finish: boolean; BEGIN

inistack(s); finish:=false; p:=t;

REPEAT

WHILE p<> NIL DO

[temp:=p^.llink; p^.llink:=p^.rlink; p^.rlink:=temp;

(7)_______; p:=p^.llink; ];

IF (8)____THEN [p:=gettop(s);temp;=pop(s);] ELSE (9)_______

UNTIL (10)___

ENDP; 【北方交通大学 2000 三、 (25分)】

65.具有n个结点的完全二叉树,已经顺序存储在一维数组A[1..n]中,下面算法是将A中顺序存储变为二叉链表存储的完全二叉树。请填入适当的语句在下面的_______上,完成上述算法。

TYPE ar=ARRAY[1..n] OF datatype;

pointer=RECORD data:datatype; lchild, rchild: pointer; END; PROCEDURE btree(VAR a: ar; VAR p:pointer);

VAR i:integer;

PROCEDURE createtree(VAR t: pointer;i: integer) BEGIN (1)_______; t^.data=a[i];

IF(2)_____THEN creattree((3)_______) ELSE t^.lchild:=NIL; IF(4)_____THEN createtree((5)_______) ELSE t^.rchild:=NIL; END; BEGIN

j:= (6)__; createtree(p,j)

END; 【北京邮电大学 1998 五、 (15分)】 66.设一棵二叉树的结点定义为 A struct BinTreeNode{

ElemType data; BinTreeNode *leftchild,*rightchild; } B C 现采用输入广义表表示建立二叉树。具体规定如下: (1)树的根结点作为由子树构成的表的表名放在表的 最前面;

D E F (2)每个结点的左子树和右子树用逗号隔开。若仅有 右子树没有左子树,逗号不能省略。

(3)在整个广义表输入的结尾加上一个特殊的符号

G (例如“#”)表示输入结束。

例如,对于如右图所示的二叉树,其广义表表示为A(B(D,E(G)),C(,F))。

此算法的基本思路是:依次从保存广义表的字符串ls中输入每个字符。若遇到的是字母(假设以字母作为结点的值),则表示是结点的值,应为它建立一个新的结点,并把该结点作为左子女(当k=1)或右子女(当k=2)链接到其双亲结点上。若遇到的是左括号“(”,则表明子表的开始,将k置为1;若遇到的是右括号“)”,则表明子表结束。若遇到的是逗号“,”,则表示以左子女为根的子树处理完毕,接着处理以右子女为根的子树,将K置为2。在算法中使用了一个栈s,在进入子表之前,将根结点指针进栈,以便括号内的子女链接之用。在子表处理结束时退栈。相关的栈操作如下:

MakeEmpty(s) 置空栈 Push(s,p) 元素p入栈

Pop(s) 退栈 Top(s) 存取栈顶元素的函数

下面给出了建立二叉树的算法,其中有5个语句缺失,请阅读此算法并把缺失的语句补上。(每空3分)

void CreatBinTree(BinTreeNode *&BT,char ls){

Stacks; MakeEmpty(s); BT=NULL; //置空二叉树 BinTreeNode *p;

int k; istream ins(ls); //把串ls定义为输入字符串流对象ins ;

char ch; ins>>ch; //从ins顺序读入一个字符

while (ch != ‘#’){ //逐个字符处理,直到遇到‘#’为止 switch(ch){

case ‘(’: (1)___;k=1; break; case ‘)’: pop(s); break; case’,’ : (2)___; break;

default :p=new BinTreeNode; (3)____;p->leftChild=NULL;p->rightChild=NULL;

if(BT==NULL) (4)___;else if (k==1) top(s)->leftChild=p; else top(s)->rightChild=p;

}

(5)____; } } 【清华大学 2001 六、 (15分)】

67. 判断带头结点的双向循环链表L是否对称相等的算法如下所示,请在划线处填上正确的语句

FUNCTION equal(l:pointer) :boolean; VAR p,q:pointer; result: Boolean;

BEGIN result =true ; p:= l^.link; q:=l^.pre ; WHILE (p<>q) AND ((1)_______)DO

IF p^.data=q^.data THEN BEGIN (2)___; (3)____; END; ELSE result=false ; return(result);

END; 【华南师范大学 2000年 五、1 ( 9分)】

68.下列是先序遍历二叉树的非递归子程序,请阅读子程序(C语言与PASCAL语言过程功能完全相同,任

选其一),填充空格,使其成为完整的算法。 C语言函数: PASCAL语言过程 void example(b) PROCEDURE example(b:btree); btree *b; VAR stack:ARRAY[1..20] OF btree; { btree *stack[20], *p; top:integer; p:btree; int top; BEGIN if (b!=null) IF b<>NIL THEN { top=1; stack[top]=b; BEGIN top:=1; stack[top]:=b; while (top>0) WHILE top>0 DO { p=stack[top]; top--; BEGIN printf(“%d”,p->data); p:=stack[top];top:=top-1; if (p->rchild!=null) write(p^.data); {(1)___; (2)___; IF p^.rchild<>NIL } if (p->lchild!=null) (3)___; (4)__; }}}} THEN BEGIN (1)__;(2)_; END; IF p^,lchild<>NIL THEN BEGIN (3)__; 4)__; END END END END; 【同济大学 2001 三、 (10分)】 69.下述是一个由二叉树的前序序列和中序序列构造该二叉树的算法,其中,数组A[1..n]存放前序序列,数组B[1..n]存放中序序列,s为根结点指针,i,j为树s的前序序列在A[1..n]中的开始位置和结束位置,x,y为树s的中序序列在B[1..n]中的开始位置和结束位置。所生成的二叉树采用二叉链表存储结构,其结点的形式为(lchild,data,rchild)。请在算法的空框中填入适当语句,使其成为一个完整的算法。 PROCEDURE creatBT(i,j,x,y: integer; VAR s: link); VAR k,L: integer; BEGIN s:= NIL;

IF(1)__THEN

BEGIN new (s); s^.data:=a[i]; k:=x; WHILE(2)_______DO k:=k+1; L:= (3)____;

IF k=x THEN s^.lchild:=NIL; ELSE(4)_______; IF k=y THEN s^.rchild:=NIL; ELSE(5)_______; END

END; 【西安交通大学 1996 五、1 (9分)】

70.已知中序遍历bt所指二叉树算法如下,s为存储二叉树结点指针的工作栈,请在划线处填入一条所缺语句。

PROC inorder (bt:bitreptr); inistack(s); (1)_______; WHILE NOT empty(s) DO

[WHILE gettop(s)<>NIL DO push(s,gettop(s)↑.lchild); (2)_______;

IF NOT empty(s) THEN [visit (gettop(s)^); p:=pop(s); (3)_______ ] ] ENDP;{inorder} 【北京轻工业学院 1999 一、 (9分)】

71.以下程序是二叉链表树中序遍历的非递归算法,请填空使之完善。二叉树链表的结点类型的定义如下: typedef struct node /*C语言/

{char data; struct node *lchild,*rchild;}*bitree;

void vst(bitree bt) /*bt为根结点的指针*/ { bitree p; p=bt; initstack(s); /*初始化栈s为空栈*/

while(p || !empty(s)) /*栈s不为空*/ if(p) { push (s,p); (1)___; } /*P入栈*/

else { p=pop(s); printf(“%c”,p->data); (2)____; } /*栈顶元素出栈*/ } 【西南交通大学 2000 一、10】

72.二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。

int depth(bitree bt) /*bt为根结点的指针*/ {int hl,hr;

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

hl=depth(bt->lchild); hr=depth(bt->rchild); if((2)___) (3)_____; return(hr+1);

} 【西南交通大学 2000 一、11】

73.n个结点的完全二叉树存储在数组a中,下面为非递归的先序遍历算法。

PROC preorder(a); BEGIN top:=0; t:=1;

WHILE (t<=n) OR (1)__ _DO

BEGIN WHILE t<=n DO BEGIN write(a[t]); top:=top+1; s[top]:=t; t:= (2)_;END; IF top>0 THEN BEGIN t:=s[top]*2+1; top:= (3)__; END; END;

END; 【中山大学 1998 四、3 (6分)】

74.后序遍历二叉树的非递归算法,bt是二叉树的根,S是一个栈,maxsize是栈的最大容量。

TYPE bitreptr=^bnodetp;

bnodetp=RECORD data:datatype; lchild,rchild:bitreptr END;

TYPE stacktyp=RECORD data:ARRAY[1..maxsize] OF bitreptr;top:0..maxsize;END; PROCEDURE posterorder(bt:bitreptr); BEGIN S.top:=0;p:=bt; REPEAT

WHILE p<>NIL DO BEGIN S.top:=S.top+1; IF S.top>maxsize THEN stackfull

ELSE BEGIN S.data[S.top]:=p; (1)__; END

END;

IF S.data[S.top]^.rchild<>NIL THEN (2)__

ELSE BEGIN REPEAT write (S.data[S.top]^.data); S.top=S.top-1;

UNTIL S.top=0 OR S.data[S.top]^.rchild<>S.data[S.top+1]; IF S.data[S.top]^.rchild<>S.data[S.top+1] THEN (3)__;

END;

UNTIL(4)___;

END; 【西北工业大学 1999 六、1 (7分)】

75.由二叉树的前序遍历和中序遍历序列能确定唯一的一棵二叉树,下面程序的作用是实现由已知某二叉树的前序遍历和中序遍历序列,生成一棵用二叉链表表示的二叉树并打印出后序遍历序列,请写出程序所缺的语句。

#define MAX 100 typedef struct Node

{char info; struct Node *llink, *rlink; }TNODE; char pred[MAX],inod[MAX]; main(int argc,int **argv)

{ TNODE *root;

if(argc<3) exit 0;

strcpy(pred,argv[1]); strcpy(inod,argv[2]); root=restore(pred,inod,strlen(pred)); postorder(root); }

TNODE *restore(char *ppos,char *ipos,int n) { TNODE *ptr; char *rpos; int k; if(n<=0) return NULL; ptr->info=(1)_______;

for((2)_______ ; rpos

ptr->llink=restore(ppos+1, (4)_______,k );

ptr->rlink=restore ((5)_______+k,rpos+1,n-1-k); return ptr; }

postorder(TNODE*ptr) { if(ptr=NULL) return;

postorder(ptr->llink); postorder(ptr->rlink); printf(“%c”,ptr->info); } 【中科院计算所 2000 三、 (10分)】 76.已给如下关于二叉树的类型说明:

TYPE tree=^node ;

node=RECORD data :integer; left ,right:tree END; 以下过程实现对二叉树t前序遍历的非递归算法:

PROCEDURE preorder(t:tree );

VAR stack: ARRAY [1..100] OF tree; nd: tree; top: integer;

BEGIN top:=1; stack[top]:=t; WHILE(1)___ DO

BEGIN nd:=stack[top];top:=top -1; write (nd^.data);

IF (nd^.right<>NIL) THEN BEGIN top:=top +1; (2)___ END;

IF (3)___THEN BEGIN (4) ;stack[top]:= nd^.left;END END

END; 【厦门大学 2000 三、1 (8分)】

77.下面是中序线索树的遍历算法,树有头结点且由指针thr指向。树的结点有五个域,分别为数据域 data,

左、右孩子域 lchild、rchild和左、右标志域 ltag,rtag。规定,标志域为1是线索,O是指向孩子的指针。

inordethread(thr) {p=thr->lchild; while ((1)______)

{ while((2) _____) p= (3) ___;

printf(p->data);

while((4)_________) { p=(5)___;printf(p->data);} p= (6)_;}

} 【南京理工大学 2000 三、1(6分)】

78.下面的算法在中序线索树中找由指针所指结点的后继并由指针指向该后继结点,试补充完整(线索树的结点有五个域data,lchild,rchild,左、右标志域ltag、rtag,并规定标志0指向孩子,1指向线索。

PROC inorder_next(p); (1)__ ;

IF p^.rtag=0 THEN WHILE(2)____DO q:= (3)___; return(q) ENDP;

【南京理工大学 1998 三、1 (6分)】

79.线索二叉树有数据域data,左右孩子域lchild和rchild,左右标志ltag及rtag,规定标志为1对应的孩子域是线索,0则为指向孩子的指针。规定在储存线索二叉树时,完成下面中序线索化过程。(存储线索二叉树,不增加头结点,只在原有的由tree指向的二叉树中增加线索,此处也不考虑c语言的具体语法与约定,线索化前所有的标志tag都是0)。

/* pre是同tree类型相同的指针,初值是null */ thread_inorder (tree) { if(tree!=null)

{ thread_inorder((1)____);

if(tree->lchild==(2)______) { tree->ltag=1; tree->lchild=pre; } if((3)___ == null){ (4)_______; (5)_______;}

pre=p; thread-inorder((6)_______);

}

} 【南京理工大学 2001 三、5 (6分)】

80.如下的算法分别是后序线索二叉树求给定结点node 的前驱结点与后继结点的算法,请在算法空格处填上正确的语句。设线索二叉树的结点数据结构为(lflag,left,data,right,rflag),其中: lflag= 0,left 指向其左孩子,lflag= 1,left 指向其前驱;rflag=0,right 指向其右孩子,rflag=1,right 指向其后继 。

prior(node,x)

{ if (node !=null)

if ((1)_____ ) *x=node->right; else *x=node->left; }

next(bt, node, x) /*bt是二叉树的树根*/ {(2)_____;

if (node!=bt && node!=null)

if (node->rflag) (3)_______ ;

else {do t=*x; (4)_______;while (*x==node); *x=t; } } 【南京航空航天大学 1996 十、 (8分)】

四、应用题

1.从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。【西安电子科技大学2001软件 二、1(5分)】

2.树和二叉树之间有什么样的区别与联系? 【西北工业大学1998一、3(4分)】【厦门大学2000五、2(14%/3分)】【燕山大学2001三、1(5分)】 3.请分析线性表、树、广义表的主要结构特点,以及相互的差异与关联。

【大连海事大学2001三(10分)】

4. 设有一棵算术表达式树,用什么方法可以对该树所表示的表达式求值? 【中国人民大学2001二、3(4分)】 5.将算术表达式((a+b)+c*(d+e)+f)*(g+h)转化为二叉树。【东北大学 2000 三、1 (4分)】 6. 一棵有n(n>0)个结点的d度树, 若用多重链表表示, 树中每个结点都有d个链域, 则在表示该树的多重链表中有多少个空链域? 为什么? 【长沙铁道学院 1998 四、1 (6分)】

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

【南京理工大学 1998 六、 (3分)】 类似本题的另外叙述有:

(1)若二叉树中度为1的结点数为0,则该二叉树的总分支数为2(n0-1),其中n0为叶结点数。

【西北工业大学 1998 三、1(5分)】

8.一个深度为L的满K叉树有以下性质:第L层上的结点都是叶子结点,其余各层上每个结点都有K棵非空子树,如果按层次顺序从1开始对全部结点进行编号,求:

1)各层的结点的数目是多少? 2)编号为n的结点的双亲结点(若存在)的编号是多少? 3)编号为n的结点的第i 个孩子结点(若存在)的编号是多少?

4)编号为n的结点有右兄弟的条件是什么?如果有,其右兄弟的编号是多少? 请给出计算和推导过程。【西北工业大学1999五(10分)】【中科院自动化所1996二、1(10分)】

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

1)各层的结点个数是多少?(3分) 2)编号为i的结点的双亲结点(若存在)的编号是多少?(3分) 3)编号为i的结点的第m个孩子结点(若存在)的编号是多少?(3分)

4)编号为i的结点有右兄弟的条件是什么?其右兄弟结点的编号是多少?(3分) 【清华大学 1999 八 (12分)】

9.证明任一结点个数为n 的二叉树的高度至少为O(logn).【浙江大学 2000 四、 (5分)】 10.有n个结点并且其高度为n的二叉树的数目是多少?

【西安电子科技大学2000计应用一、3(5分)】

11.已知完全二叉树的第七层有10个叶子结点,则整个二叉树的结点数最多是多少? 【西安电子科技大学2000计应用 一、4 (5分)】

12.高度为10的二叉树,其结点最多可能为多少?【首都经贸大学 1998 一、1 (4分)】

13.任意一个有n个结点的二叉树,已知它有m个叶子结点,试证明非叶子结点有(m-1)个度为2,其余度为1。【西安电子科技大学2001计应用 二、3 (5分)】

14. 已知A[1..N]是一棵顺序存储的完全二叉树,如何求出A[i]和A[j]的最近的共同祖先? 【中国人民大学 2001 二、5 (4分)】

15.给定K(K>=1),对一棵含有N个结点的K叉树(N>0)、请讨论其可能的最大高度和最小高度。 【大连海事大学 2001 五、 (8分)】

16.已知一棵满二叉树的结点个数为20到40之间的素数,此二叉树的叶子结点有多少个? 【东北大学 1999 一、1 (3分)】

17.一棵共有n个结点的树,其中所有分支结点的度均为K,求该树中叶子结点的个数。 【东北大学 2000 一、3 (4分)】

18. 如在内存中存放一个完全二叉树,在树上只进行下面两个操作: (1)寻找某个结点双亲 (2)寻找某个结点的儿子;

请问应该用何种结构来存储该二叉树?【东北大学 2001 一、3 (3分)】

19.求含有n个结点、采用顺序存储结构的完全二叉树中的序号最小的叶子结点的下标。要求写出简要步骤。【北京工业大学 2000 二、3 ( 5分)】

20.设二叉树T中有n个顶点,其编号为1,2,3,?,n,若编号满足如下性质: (1)T中任一顶点v的编号等于左子树中最小编号减1;

(2)对T中任一顶点v,其右子树中最小编号等于其左子树中的最大编号加1。试说明对二叉树中顶点编号的规则(按何种顺序编号)。 【山东大学 1992 一、1 (3分)】

21.若一棵树中有度数为1至m的各种结点数为n1,n2,?,nm(nm表示度数为m的结点个数)请推导出该树中共有多少个叶子结点n0的公式。【北京邮电大学1993二1(6分)】【西安交通大学1996四、1(5分)】【南京航空航天大学1998五(10分)】【东南大学1999一 4(8分)】【山东大学1993一2(4分)】

【山东师范大学2001 二3(12分) 2001二2(15分)】

22.若一棵完全二叉树中叶子结点的个数为n,且最底层结点数≧2,则此二叉树的深度H=? 【北京科技大学 2001 一、6 (2分)】

23.已知完全二叉树有30个结点,则整个二叉树有多少个度为0的结点? 【山东师范大学1996五、3(2分)】

24.在一棵表示有序集S的二叉搜索树(binary search tree)中,任意一条从根到叶结点的路径将S分为3部分:在该路径左边结点中的元素组成的集合Sl;在该路径上的结点中的元素组成的集合S2;在该路径右边结点中的元素组成的集合S3。S=S1∪S2∪S3。若对于任意的a∈Sl,b∈S2,c∈S3是否总有a≤b≤c?为什么?【清华大学 2000 四(10分)】【武汉大学 2000 三、3】

25.试证明,在具有n(n>=1)个结点的m次树中,有n(m-1)+1个指针是空的。【复旦大学1998四(8分)】 26.对于任何一棵非空的二叉树,假设叶子结点的个数为n0,而次数为2的结点个数为n2,请给出n0和n2之间所满足的关系式n0=f(n2).要求给出推导过程。【复旦大学 1998 五 (8分)】

27.对于任意一棵非空的二叉树T,我们用n0表示T中叶子结点的个数,用n2表示T中有两棵非空子树的结点的个数。(1)给出n0和n2所满足的关系式。(2)证明你在(1)中给出的关系式成立。

【复旦大学 1997 三 (10分)】

28.试求有n个叶结点的非满的完全二叉树的高度;【中科院计算所 2000 五、 (5分)】 29.对于具有n个叶子结点,且所有非叶子结点都有左右孩子的二叉树, (1)试问这种二叉树的结点总数是多少?(5分)

(2)试证明=1。其中:li表示第i个叶子结点所在的层号(设根结点所在层号为1)。(10分)

【北方交通大学 1995 三、 (15分)】

30.假设高度为H的二叉树上只有度为0和度为2的结点,问此类二叉树中的结点数可能达到的最大值和最小值各为多少?【北京邮电大学 1996 一、1 (4分)】

31.一棵满k叉树,按层次遍历存储在一维数组中,试计算结点下标的u的结点的第i个孩子的下标以及结点下标为v的结点的父母结点的下标。【北京邮电大学 2001 四、4(5分)】

32.二叉树有n个顶点,编号为1,2,3,? ,n,设: * T中任一顶点V的编号等于左子树中最小编号减1;

* T中任一顶点V的右子树中的最小编号等于其左子树中的最大编号加1; 试描绘该二叉树。【东南大学 1999 一、2 (7分)】

33.设T是具有n个内结点的扩充二叉树,I是它的内路径长度,E是它的外路径长度。 (1)试利用归纳法证明E=I+2n, n>=0.(5分)

(2)利用(1)的结果试说明:成功查找的平均比较次数s与不成功查找的平均比较次数u 之间的关系可用公式表示s=(1+1/n)u-1,n>=1。 【清华大学 1998 四、 (10分)】

34.一棵非空的有向树中恰有一个顶点入度为0, 其它顶点入度为1,但一个恰有一个顶点入度为0,

其它顶点入度为1的有向图却不一定是一棵有向树,请举例说明。【中科院计算所 1999 三、1 (5分)】

35.试给出下列有关并查集(mfsets)的操作序列的运算结果:

union(1,2),union(3,4),union(3,5),union(1,7),union(3,6),union(8,9), union(1,8),union(3,10),union(3,11),union(3,12),union(3,13), union(14,15),union(16,0),union(14,16),union(1,3),union(1,14).

(union是合并运算,在以前的书中命名为merge)

要求

(1)对于union(i,j),以i作为j的双亲; (5分)

(2)按i和j为根的树的高度实现union(i,j),高度大者为高度小者的双亲; (5分) (3)按i和j为根的树的结点个数实现union(i,j),结点个数大者为结点个数小者的双亲。(5分) 【清华大学 2001 一、 (15分)】

36.证明:在任何一棵非空二叉树中有下面的等式成立:叶结点的个数=二度结点的个数+1 【天津大学 1999 四 】

37. 对于一个堆栈,若其入栈序列为1,2,3,?,n,不同的出入栈操作将产生不同的出栈序列。其出栈序列的个数正好等于结点个数为n的二叉树的个数,且与不同形态的二叉树一一对应。请简要叙述一种从堆栈输入(固定为1,2,3??n)/输出序列对应一种二叉树形态的方法,并以入栈序列1,2,3(即n=3)为例加以说明。【浙江大学 1998年 五、1 (7分)】

38. 如果给出了一个二叉树结点的前序序列和对称序序列,能否构造出此二叉树?若能,请证明之。若不能,请给出反例。如果给出了一个二叉树结点的前序序列和后序序列,能否构造出此二叉树?若能,请证明之。若不能,请给出反例。【北京大学 1998 二、2 (5分)】

类似本题的另外叙述有:

(1) 二叉树的中序与后序序列能唯一地定义一棵二叉树吗? 这里所指序列中的符号代表树结点中的标识符吗?二叉树的前序与后序序列能唯一地定义一棵二叉树吗?为什么?【东南大学1993一、4(8分)】

39.试证明:同一棵二叉树的所有叶子结点,在前序序列。对称序序列以及后序序列中都按相同的相对位置出现(即先后顺序相同),例如前序abc,后序bca对称序bac。【山东工业大学 1997 七、 (10分)】

40. 由二叉树的中序序列及前序序列能唯一的建立二叉树,试问中序序列及后序序列是否也能唯一的建立二叉树,不能则说明理由,若能对中序序列DBEAFGC和后序序列DEBGFCA构造二叉树。

【南京理工大学 1998 四、 (3分)】

41. 证明,由一棵二叉树的前序序列和中序序列可唯一确定这棵二叉树。设一棵二叉树的前序序列为ABDGECFH,中序序列为:DGBEAFHC 。试画出该二叉树。【浙江大学 1996 六、 (8分)】 类似本题的另外叙述有:

(1) 证明:由一棵二叉树的前序序列和中序序列可唯一确定这棵二叉树。

【长沙铁道学院1997五、2(10分)】

(2)证明:由二叉树的中序遍历序列和后序遍历序列可唯一地确定出该二叉树。

【华南理工大学 2001 一、3 (4分)】

(3)二叉树已知其中序扫描序列和后序扫描序列如何确定这一棵二叉树,并举例说明. 【山东大学 2001软件与理论 二 、1 (4分)】

42.试证明:仅仅已知一棵二叉树的后序遍历序列和先序遍历序列,不能唯一地确定这棵二叉树。 【大连海事大学 2001 九、 (8分)】 类似本题的另外叙述有:

(1) 由二叉树的前序遍历和后序遍历结果能否唯一确定一棵二叉树?解释你的论断。 【西安电子科技大学2001计应用 二、4 (5分)】

(2) 假定某二叉树的前序遍历序列为ABCDEFGHIJ,后序遍历序列为CEFDBJIHGA,据此两个序列能否唯一确定此二叉树? 若不能,试画出两样具有同样上述遍历序列的二叉树.【武汉交通科技大学1996二8(3分)】

43. ① 试找出满足下列条件的二叉树

1)先序序列与后序序列相同 2)中序序列与后序序列相同

3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同

② 已知一棵二叉树的中序序列和后序序列分别为DBEAFIHCG和DEBHIFGCA,画出这棵二叉树。 【东北大学 1999 六、 (4分)】

类似本题的另外叙述有: (1)试画出在先根次序和中根次序下结点排列顺序皆相同的所有类型的二叉树形。

试画出在先根次序和后根次序下结点排列顺序皆相同的所有类型的二叉树形。 【吉林大学 1995 四、1,2 (每题7分)】

(2)找出所有的二叉树,其结点在下列两种遍历下恰好都有同样的遍历序列。

1)先序遍历和中序遍历 2)先序遍历和后序遍历【北京理工大学 1999 三(6分)】 (3)找出所有的二叉树,其结点在下列两种遍历下,恰好都是以同样的顺序出现:

1)前序遍历和中序遍历。 2)前序遍历和后序遍历。【南京航空航天大学 1995 六(5分)】 (4)试找出分别满足下列条件的所有二叉树。

1)先序序列和中序序列相同 2)中序序列和后序序列相同 3)先序序列和后序序列相同 【南京航空航天大学 2001 二、(10分)】 (5)找出所有满足下列条件的二叉树:

1)它们在先序遍历和中序遍历时,得到的结点访问序列相同; 2)它们在后序遍历和中序遍历时,得到的结点访问序列相同; 3)它们在先序遍历和后序遍历时,得到的结点访问序列相同;【东南大学2000一、4(6分)】 44.将下列由三棵树组成的森林转换为二叉树。(只要求给出转换结果)

A B C D E F K H L G I J M N O

P 【南京航空航天大学 1998 一、 (10分)】

45. 阅读下列说明和流程图,回答问题(1)和问题(2)。

说明:流程图是用来实现中序遍历,二叉树存放在数组tree中,每个数组元素存放树中一个结点,每个

结点的形式为(值,左指针,右指针),分别用tree[i].v,tree[i].l,tree[i].r来表示第i个结点的值,左指针,右指针,其中左,右指针的值为所指结点在数组中的下标,若指针的值为0,表示它指向空树,图中指针root用以指向二叉树的根结点。问题:

(1)填充流程图中的①、②、③,使其按中序遍历二叉树。

(2)把流程图中的(A)框移至哪个位置(图中Ⅰ~Ⅸ)使流程图的算法从中序遍历变成后序遍历。 【上海海运学院 1997年 四、(13分)】

46.设一棵二叉树的先序、中序遍历序列分别为

先序遍历序列: A B D F C E G H 中序遍历序列: B F D A G E H C (1)画出这棵二叉树。

(2)画出这棵二叉树的后序线索树。 (3)将这棵二叉树转换成对应的树(或森林)。【南京航空航天大学 1997 二、 (10分)】 47.已知一棵二叉树的对称序和后序序列如下: 对称序:GLDHBEIACJFK 后序: LGHDIEBJKFCA (1) (2分)给出这棵二叉树: (2) (2分)转换为对应的森林:

(3) (4分)画出该森林的带右链的先根次序表示法:

Itag=

(4) (4分) 画出该森林带度数的后根次序表示法:

(5) (4分)在带度数的后根次序表示法中,不包含指针,但仍能完全反映树的结构。写出以结点x为根的子树在后根次序序列中的前驱的求法。(用语言叙述,不用写算法)【山东大学 1998 八、(16分)】

48.设某二叉树的前序遍历序列为:ABCDEFGGI,中序遍历序列为:BCAEDGHFI: (1)试画出该二叉树;

(2)写出由给定的二叉树的前序遍历序列和中序遍历序列构造出该二叉树的算法。

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

【浙江大学 1997 六、 (15分)】

类似本题的另外叙述有: (1)已知二叉树的先序序列: CBHEGAF, 中序序列: HBGEACF, 试构造该二叉树

【北京理工大学 2001 八、2 (4分)】

(2)已知二叉树按中序排列为BFDAEGC,按前序排列为ABDFCEG,要求画出该二叉树。

【山东师范大学 1996 五、1 (2分)】

(3)已知一棵二叉树的前序序列 A,B,D,C,E,F,中序序列B,D,A,E,F,C. 画出这棵二叉树。

【燕山大学 1999 四、 (5分)】

(4)已知一棵二叉树的前序遍历结果是:ABCDEFGHIJ,中序遍历的结果是:BCEDAGHJIF,试画出这棵二叉树。【厦门大学 1998 六、1 (7分)】

(5)已知二叉树BT各结点的先序、中序遍历序列分别为ABCDEGF和CBAEDF,试画出该二叉树。

【北京工业大学 1998 二、 (6分)】

49. 假设一棵二叉树的前序序列为ABCD,它的中序序列可能是DABC吗?【石油大学1998一、1(5分)】

类似本题的另外叙述有: (1)一棵前序序列为1,2,3,4,的二叉树,其中序序列可能是4,1,2,3吗?设一棵二叉树的前序序列为1,2,3,4,5,6,7,8,9,其中序序列为2,3,1,5,4,7,8,6,9,试画出该二叉树。

【东南大学 1996一、2 (7分) 1998 一、3】

50.一棵非空的二叉树其先序序列和后序序列正好相反,画出这棵二叉树的形状。 【西安电子科技大学2000软件 一、8 (5分)】

51.已知一棵二叉树的后序遍历序列为EICBGAHDF,同时知道该二叉树的中序遍历序列为CEIFGBADH,试画出该二叉树。【重庆大学 2000 二、2】

类似本题的另外叙述有: (1)已知二叉树BT各结点的中序和后序序列分别为DFBACEG和FDBGECA,试构造出该二叉树BT,并作简要说明。【北方交通大学 1997 二、 (8分)】

(2)已知二叉树的中序遍历序列为G F B E A N H M,后序遍历的结点序列为G E B F H N M A ,画出此二叉树的形态。【青岛海洋大学 1999 一、5(5分)】

(3)已知二叉树的后序序列为ABCDEFG 和中序序列为ACBGEDF,构造出该二叉树。

【福州大学 1998 三、1 (6分)】

(4)已知某二叉树的后序遍历和中序遍历如下,构造出该二叉树。

后序遍历序列: G D B E I H F C A 中序遍历序列 :D G B A E C H I F 【厦门大学 2000 七、1 (20%/3分)】

(1)求出二叉树的高度。

(2)求出每个结点的层号(根结点层号为1),并填入D(i)中。(可采用任何高级语言,但要注明你所采用的语言名称)。 【山东大学 1992 三、 (13分)】

h

9.已知深度为h的二叉树采用顺序存储结构已存放于数组BT[1:2-1]中,请写一非递归算法,产生该二叉树的二叉链表结构。设二叉链表中链结点的构造为(lchild,data,rchild),根结点所在链结点的指针由T给出。 【北京航空航天大学 1999 七、 (15分)】

10. 二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。其中指针lchild

下标 data lchild rchild 1 A B C E D F G 2 3 4 5 6 7 A B C D E F G 2 3 0 5 0 0 0 6 4 0 0 0 7 0 和rchild的类型为bitre。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。所不同的是,lchild和rdhild 为integer型,分别用于存储左右孩子的下标,如果没有左右孩子,则相应的值为0。例如,下面左图所示的二叉树的静态二叉链表如右图所示。

编写算法由二叉树的动态二叉链表构造出相应的静态二叉链表a[1..n],并写出其调用形式和有关的类型描述。其中n为一个确定的整数。【合肥工业大学 2000 五、3 (8分)】

11.假设以双亲表示法作树的存储结构,写出双亲表示的类型说明,并编写求给定的树的深度的算法。(注:已知树中结点数)【清华大学 1994 七、 (15分)】

12.试编写算法求出二叉树的深度。二叉树的存储结构为如下说明的二叉链表: TYPE btre=↑bnode

bnode=RECORD data:datatype; lch,rch:btre END; 【北京轻工业学院1997一(15分)】【南京航空航天大学1997十(10)】【北京理工大学2000四3(4)】 13.二叉树采用二叉链表存储:

(1)编写计算整个二叉树高度的算法(二叉树的高度也叫二叉树的深度)。

(2)编写计算二叉树最大宽度的算法(二叉树的最大宽度是指二叉树所有层中结点个数的最大值)。 【西北大学 2001 四】

14. 以孩子兄弟链表为存储结构,请设计递归和非递归算法求树的深度。【北方交通大学1999五(18分)】

类似本题的另外叙述有:

(1)设T是一棵n元树,Tb是T的孩子兄弟表示(二叉链表)的二叉树,试编程,由Tb计算T的高度(要求用非递归方法实现)。【南京航空航天大学 2000 九】

15.设一棵二叉树的结点结构为 (LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p和q分别为指向该二叉树中任意两个结点的指针,试编写一算法ANCESTOR(ROOT,p,q,r),该算法找到p和q的最近共同祖先结点r。【吉林大学 2000 二、3 (12分)】 【中山大学 1994 六 (15分)】

16.已知一棵二叉树按顺序方式存储在数组A[1..n]中。设计算法,求出下标分别为i和j的两个结点的最近的公共祖先结点的值。【武汉大学 2000 五 1】

17.设计这样的二叉树,用它可以表示父子、夫妻和兄弟三种关系,并编写一个查找任意父亲结点的所有儿子的过程。【燕山大学 2001 四、5 (8分)】

18.在二叉树中查找值为x的结点,试编写算法(用C语言)打印值为x的结点的所有祖先,假设值为x的结点不多于一个,最后试分析该算法的时间复杂度(若不加分析,直接写出结果,按零分算)。

【上海交通大学 1998 五】 类似本题的另外叙述有:

(1)在二叉树中查找值为x的结点,请编写一算法用以打印值为x的结点的所有祖先,假设值为x的结点不多于1个。注:采用非递归算法。【西安电子科技大学1996 六(10分)】

(2)设二叉树中结点的数据域的值互不相同,试设计一个算法将数据域值为x 的结点的所有祖先结点的数据域打印出来。【北方交通大学 1996 八(20分)】

(3)设二叉树根指针为t,且树中结点值各不相同,写出算法disp_f(t,x),查找树中值为t的结点,并显示出其所有祖先结点的值。【首都经贸大学 1998 三、4 (20分)】

A (4)若一棵二叉树中没有数据域值相同的结点,设计算法

B C 打印数据域值为x的所有祖先结点的数据域。如果根结点的 A D E 数据域值为x或不存在数据域值为x的结点,则什么也不打 C B 印。例如右图所示的二叉树,则打印结点序列为A、C、E。 F G X 【北京工业大学 1995 五、 (16分)】 F D E H I 19.利用栈的基本操作写出先序遍历二叉树的非递归算法

G H I 要求进栈的元素最少,并指出下列(最右图)二叉树中需进栈 18(4)题图

K 的元素。 【山东科技大学 2002 四、 (10分)】

20.设一棵完全二叉树使用顺序存储在数组bt[1..n]中,请写 19题图 出进行非递归的前序遍历算法。【西安电子科技大学1998 四(8分)】

21.若二叉树用以下存储结构表示,试给出求前序遍历的算法:

TYPE Tree:=ARRAY[1..max] OF RECORD data:char;parent:integer; END; A 下标 1 2 3 4 5 6 C 数据 D C A B B E F 父母 -5 3 0 2 E -3 -2 D F

【北京邮电大学2002 五、4 (15分)】

22.设计算法返回二叉树T的先序序列的最后一个结点的指针,要求采用非递归形式,且不许用栈。 【合肥工业大学 1999 五、2 (8分)】

23.已知一棵高度为K具有n个结点的二叉树,按顺序方式存储: (1)编写用先根遍历树中每个结点的递归算法;

(2)编写将树中最大序号叶子结点的祖先结点全部打印输出的算法。【东北大学 1997 六(20分)】。 24.对于二叉树的链接实现,完成非递归的中序遍历过程。 【中山大学 1999 五、 (15分)】 类似本题的另外叙述有:

(1)写出中序遍历二叉树的非递归算法及递推算法。【大连海事大学1996 六、2 (10分)】。 (2)设计一个中序遍历算法,应用栈来存储树结点,要求结点仅能进栈和出栈一次。(本题指中序遍历二叉树)【西安电子科技大学1999计应用 四 (10分)】 (3)用非递归方式写出二叉树中序遍历算法。【山东科技大学 2002 六、2 (9分)】 25.已知二叉树用下面的顺序存储结构,写出中序遍历该二叉树的算法。 TYPE ARRAY [1..maxn] OF RECORD data:char; //存储结点值

Lc,Rc;integer; END; //存左孩子右孩子的下标,0表示无左、右孩子。 1 2 3 4 5 6 7 8 9 data A B C D E F G H I Lc 2 4 0 0 0 8 0 0 0 Rc 3 5 6 0 7 9 0 0 0 如树 T=A(B(D,E,(#,G)),C(#,F(H,I)))存储如上图。【北京邮电大学 1999 九 (10分)】

26.试给出二叉树的自下而上、自右而左的层次遍历算法。【吉林大学 2001 二 、2 (8分)】

27.在一棵以二叉链表表示的二叉树上,试写出用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目的算法。二叉链表的类型定义为:

TYPE bitreptr=^bnodetp;

bnodetp=RECORD data:char; lchild,rchild:bitreptr END;

【同济大学 2000 三、2 (12分)】 类似本题的另外叙述有:

(1)请设计算法按层次顺序遍历二叉树。【北方交通大学 2001 四、 (20分)】 (2)试以二叉链表作存储结构,编写按层次顺序遍历二叉树的算法。【上海交通大学1999 三(12分)】 (3)已知一棵以二叉链表作存储结构的二叉树,编写按层次顺序(同一层自左至右)遍历二叉树的算法。

【燕山大学 1999 十、1 (8分)】

(4)设二叉树用二叉链表存储,试编写按层输出二叉树结点的算法。【北京理工大学2001九、2(8分)】 (5)写出按层次顺序打印任意二叉树T中结点的程序。二叉树采用双链结构,结点形式为(LSON,DATA,RSON)可采用任何你熟识的算法语言,设T 指向二叉树的根结点。【山东大学1993 二 (12分)】

28.设一棵二叉树以二叉链表为存贮结构,结点结构为(lchild, data,rchild),设计一个算法将二叉树中所有结点的左,右子树相互交换。【福州大学 1998 四、2 (10分)】

类似本题的另外叙述有:

(1)设t为一棵二叉树的根结点地址指针,试设计一个非递归的算法完成把二叉树中每个结点的左右孩子位置交换。【东北大学 1996 五、 (14分)】

(2)写一个将二叉树中每个结点的左右孩子交换的算法。(统考生做)【南京航空航天大学1999九(10分)】 29.设T是一棵满二叉树,编写一个将T的先序遍历序列转换为后序遍历序列的递归算法。 【东北大学 2001 三 (15分)】

30.已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法。 【东北大学 1999 六、3 (12分)】

31.设二叉树采用二叉链表作为存储结构。试用类PASCAL语言实现按前序遍历顺序输出二叉树中结点的非递归算法。要求定义所用结构。设栈已经定义:inits(S),empty(S) push(S,P),pop(S),top(S)分别为栈初始化,判栈空,入栈,出栈,看栈顶等操作。【北京工业大学1997二、1(10分)】

h

32.已知深度为h的二叉树以一维数组BT(1:2-1)作为其存储结构。请写一算法,求该二叉树中叶结点的个数。【北京航空航天大学 1996】

33.设某二叉树结点结构为: TYPE bitreptr=^bnodetp;

bnodetp=RECORD data:integer; lchild,rchild:bitreptr END; 试编写算法,计算每层中结点data域数值大于50的结点个数,并输出这些结点的data域的数值和序号。

【北京工业大学 1998 九(10分)】

34.编写递归程序将二叉树逆时针旋转90度打印出来。如右图:(要求用类PASCAL语言,并描述结构)。

【北京工业大学 1999 二 、 (6分)】 35.二叉树排序方法如下:

(1)将第一个数据放在树根。 (2)将随后读入的数据与树根中的数据相比较,若比树根大,则置于右子树,反之则置于左子树,建成一棵二叉树;

(3)利用中序遍历打印排序结果。

试用PASCAL或C语言编写二叉树的排序程序,并分析其算法复杂性。【浙江大学 1995 九 (15分)】

36.已知一二叉树中结点的左右孩子为left和right,p指向二叉树的某一结点。请用C或PASCAL编一个非递归函数postfirst(p),求p所对应子树的第一个后序遍历结点。【浙江大学1998 六(10分)】

37.已知二叉树T的结点在先根次序下的排列为A[1],A[2],?,A[n],在中根次序下的排列为B[1],B[2],?,B[n],其中,A和B是一维数组,数组元素的值为T中相应的结点的INFO字段的值,并假定二叉树T中结点的INFO字段的值互不相同,n>=0。试解答:

(1)证明由A[1:n]和B[1:n]能唯一的确定二叉树T的结构;

(2)给出建造二叉树T的算法,要求所建造的二叉树以LLINK/RLINK链接结构表示,且该算法是非递归算法;

(3) 分析你所给算法的时间复杂性,该过程包括如何确定基本运算如何推导出期望复杂性和最坏复杂

性。【吉林大学 1997 四 (20分) 1998 二 】

38.已知一具有n个结点的二叉树的中序遍历序列与后序遍历序列分别存放于数组IN[1:n]和POST[1:n]中,(设该二叉树各结点的数据值均不相同)。请写一建立该二叉树的二叉链表结构的非递归算法。该二叉链表的链结点结构为(lchild,data,rchild),其中data为数据域,lchild与rhild分别为指向该结点左、右孩子的指针域(当孩子结点不存在时,相应指针域为空,用nil表示)。

【北京航空航天大学 1998 六 (15分)】

39.试写出复制一棵二叉树的算法。二叉树采用标准链接结构。【山东大学 2000 二 (10分)】。 类似本题的另外叙述有:

(1)已知二叉树T,试写出复制该二叉树的算法(t→T)

(1)(8分)递归算法(2)(12分)非递归算法【北方交通大学 1993 七(20分)】 (2)算法题(共20分,每题10分)

(1)试写出一递归函数,判别两棵树是否相等。 (2)试写出一递归函数,复制一棵二叉树。【山东工业大学 1997 八、 (20分)】

40.假设一维数组H[1:n]存放森林F的每个结点的地址,且序列H[1],H[2],?,H[n]正好是森林F在先根次序下结点地址的排列;E[1:n]是一维数组,且当1<=i<=n时,E[i]是H[i]所指结点的次数(即儿子结点的个数)。试给出一个算法,该算法计算森林F的树形个数,并计算森林F的最后一个树形的根结点地址。【吉林大学 1995 五(15分)】 41.请设计一个算法,要求该算法把二叉树的叶子结点按从左到右的顺序连成一个单链表,表头指针为head。 二叉树按二叉链表方式存储,链接时用叶子结点的右指针域来存放单链表指针。分析你的算法的时、空复杂度。【华南师范大学 1999 六、2 (13分)】 类似本题的另外叙述有:

(1)已知二叉树的链表存储结构定义如下:

TYPE bitreptr=^bitrenode;

bitrenode=RECORD data:char; lchild,rchild:bitreptr END;

编写一个递归算法,利用叶结点中空的右链指针域rchild,将所有叶结点自左至右链接成一个单链表,算法返回最左叶结点的地址(链头)。 【清华大学 1997 三、 (10分)】

42.设二叉树以二叉链表示。使用类PASCAL 语言编一过程,输出二叉树中各结点的数据及其所在的层数(已知一棵二叉树按中序遍历时各结点被访问的次序和这棵二叉树按后序遍历时各结点被访问的次序,是否唯一确定这棵二叉树的结构?为什么?若已知一棵二叉树按先序遍历时各结点被访问的次序和这棵二叉树按后序遍历时各结点访问的次序,能否唯一确定这棵二叉树的结构?为什么?) A 【南开大学 1997 四(15分) 1998 三(12分)】 B E 43.写一非递归遍历算法,使右图树遍历输出顺序为字母顺序。 C H F K 【中国人民大学 2000 三、1 (10分)】 D J I N G M L Q 44.二叉树结点的平衡因子(bf)定义为该结点的左子树高度与 P O T S R U 右子树高度之差。设二叉树结点结构为:(lchild,data,bf,rchild),

lchild,rchild 是左右儿子指针;data是数据元素;bf是平衡因子,编写递归算法计算二叉树中各个结点的平衡因子。【石油大学 1998 四、 (18分)】 类似本题的另外叙述有:

(1)设二叉树结点结构为(left,data,bf,right)。定义二叉树结点T的平衡因子bf(T)=hl-hr,写一递归算法确定二叉树tree中各结点的平衡因子bf,同时返回二叉树中非叶结点个数。【东南大学1996四(15分)】 45.已知二叉树T采用二叉链表结构存储,每个结点有三个字段: A data,Lchild和Rchild 。设计算法求出T的顺序存储结构A[1..n], B C 并给出初始调用形式。要求:如某位置为空,将其置为null;如超

E G D F 出下标范围n,则报错;最后返回实际的最大下标.右图所示为n=15 I H 时一个二叉树及所对应的输出结果示例(空缺表示null)。 J 输出结果(表结构的值和最大下标):=12(最大下标为12)【合肥工业大学 2001 五、5 (8分)】

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D E F G H I J 46.设两棵二叉树的的根结点地址分别为p和q,采用二叉链表的形式存储这两棵树上所有的结点。请编写程序,判断它们是否相似。【上海交通大学 2000 十二(8分)】 类似本题的另外叙述有:

(1)编写一个函数或过程判定两棵二叉树是否相似,所谓两棵二叉树s和t相似,即是要么它们都 为空或都只有一个结点,要么它们的左右子树都相似。【厦门大学 2000 四、1 (9分)】 (2)设计判断两棵二叉树是否相似的算法。【中国矿业大学 2000 四(10分)】

47.编写递归算法,依据树的双亲表示法及其根结点创建树的孩子-兄弟链表存储结构。要求写算法以前先写出这两种存储结构的类型说明。【清华大学 1995 六(20分)】

48.已知二叉树以二叉链表存储,编写算法完成:对于树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。【北京轻工业学院 1998 二(14分)】 类似本题的另外叙述有: (1)设T是一棵给定的查找树,试编写一个在树中删除根结点为a的子树的程序,要求在删除的过程中释放该子树所有结点所占有的存储空间,这里假设树T中结点所占有的存储空间是通过动态存储分配取得的,其结点的形式为:(lchild,data,rchild) 【复旦大学 1999 七、 (15分)】

49.试为二叉树写出一个建立三叉链表的算法,并在此三叉链表中删去每一个元素值为x的结点,以及以它为根的子树,且释放相应存储空间。二叉树的三叉链表的描述为: TYPE bitreptr=^nodetp;

nodetp=RECORD data:char; lchild,rchild,parent:bitreptr END;

VAR bt:bitreptr; 【同济大学 1998 四(14分)】

50.设一棵二叉树的根结点指针为T,C为计数变量,初值为0,试写出对此二叉树中结点计数的算法:BTLC(T,C)。【北京科技大学 1999 十、2(10分) 2000 十、2(10)】 51.试编写算法,对一棵以孩子—兄弟链表表示的树统计叶子的个数。【北京轻工业学院2000四(15分)】 52.设计算法:统计一棵二叉树中所有叶结点的数目及非叶结点的数目。【南开大学 2000 三、1】

53.用类PASCAL语言编写一非递归算法,求二叉树上叶子结点的数量。二叉树用二叉链表存贮,左指针定义为lchild,右指针定义为rchild。【燕山大学 2000 七、2(8分)】

类似本题的另外叙述有:

(1)用递归方法求已知二叉树的叶结点个数。【天津大学 1999 七】

54.一棵二叉树以二叉链表来表示,求其指定的某一层k(k>1)上的叶子结点的个数。

【上海大学 1999 三、1(18分)】

55.二叉树采用二叉链表方式存放,对二叉树从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,请回答采用什么次序的遍历方式实现编号?并给出在二叉树中结点的数据域部分填写实现如上要求编号的非递归算法。

【西北大学 2001 六】

56.设一棵二叉树中各结点的值互不相同,其前序序列和中序序列分别存于两个一维数组pre[1..n ]和mid[1..n ]中,试遍写算法建立该二叉树的二叉链表。【南京航空航天大学 1999 十(10分)】

类似本题的另外叙述有:

(1)已知一棵二叉树的先序遍历序列和中序遍历序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。【上海交通大学 1999 四(12分)】

(2)已知一棵二叉树的前序序列和中序序列分别存于两个一维数组PRE[1..n]和INO[1..n]中,请编写算法来建立该二叉树的二叉链表。【西安电子科技大学1999软件 三(8分)】

(3)已知一棵二叉树的前序序列和中序序列,可唯一地确定该二叉树。试编写据此思想构造二叉树的算法。【北方交通大学 1995 七(20分)】

57.已知二叉树的中序遍历序列为GFBEANHM,后序遍历的结点序列为GEBFHNMA。

(1)画出此二叉树的形态。(2)写出根据二叉树的中序和后序遍历的结点序列,建立它的二叉链表存储结构的递归算法。 【北京邮电大学 1992 四 (20分)】

58.假设二叉树采用链式存储结构进行存储,root^为根结点,p^为任一给定的结点,请写出求从根结点到p^之间路径的非递归算法。【西安电子科技大学2000软件 三(9分)】 59.设二叉树的结点具有如下的结构:(lchild,info,rchild),指针变量BT指向该树的根结点,试设计一个算法打印出由根结点出发到达叶结点的所有路径。

【北方交通大学 1994 八(16分)】【中国人民大学 2000 三、2(10分)】 60.设二叉树的结点结构是(Lc,data,Rc),其中Lc、Rc分别为指向左、右子树根的指针,data是字符型数据 。试写出算法,求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。

【北京邮电大学1997八(20分)】

61.设t是一棵按后序遍历方式构成的线索二叉树的根结点指针,试设计一个非递归的算法,把一个地址

为x的新结点插到t树中,已知地址为y的结点右侧作为结点y的右孩子,并使插入后的二叉树仍为后序线索二叉树。【东北大学 1996 七 (15分)】

62.请用类C或用类PASCAL语言编写算法。请编写在中序全线索二叉树T中的结点P下插入一棵根为X的中序全线索二叉树的算法。如果P左右孩子都存在,则插入失败并返回FALSE;如果P没有左孩子,则X作为P的左孩子插入;否则X作为P的右孩子插入。插入完成后要求二叉树保持中序全线索并返回TRUE。【上海大学 2002 七、1 (10分)】 63.有中序穿索树T,结点形式为:(LL,LT,D,RT,RL),试编写非递归算法找到数据域为A的结点,并在其左子树中插入已知新结点X:插入方式如下:

没插入前: 插入后: A B C D F E G I H

第66题图

注意:可能A有左孩子或无左孩子,插入后考虑穿索的状态应作何修改。【上海大学1998六(17分)】

64.编写一算法,利用叶子结点中的空指针域将所有叶子结点链接为一个带有头结点的双链表,算法返回头结点的地址。【东北大学 1999 四(13分)】

65.编写程序段,利用中序全线索树求其中任意结点p^的前序后继结点,结果仍用p指出。要求先描述结构和算法思路。设线索树不带头结点,其中序序列第一结点的左标志和最后结点的右标志皆为0(非线索),对应指针皆为空。【北京工业大学 2000 七(10分)】

66.已知一个二叉树如下图,修改结点(node)的连接方式,以致可以不借助辅助堆栈实现中序遍历的非递归方法。画出修改后的结点连接图并写出其实现中序遍历的非递归算法。【浙江大学2002五(10分)】 67.已知指针p指向带表头的中根次序穿线二叉树中的某结点,试写一算法FFA(p,q),该算法寻找结点p的父亲结点q。设穿线二叉树的结点结构、表头结点结构和空树结构分别为(LTAG,LLINK,INFO,RLINK,RTAG),且规定穿线树的最左下结点的LLINK域和最右下结点的RLINK域指向表头。【吉林大学 1999 二 、1 (16分)】

68. 给出中序线索树的结点结构并画出一个具有头结点的中序线索树,使其树结点至少应有6个。写一算法在不使用栈和递归的情况下前序遍历一中序线索树,并分析其时间复杂性。

【东南大学 1993 三(20分) 1997 三(18分) 1998 六(14分)】

69.设有二叉树BT,每个结点包括ltag、lchild、data、rchild、rtag五个字段,依次为左标志、左儿子、数据、右儿子、右标志。给出将二叉树BT建成前序(即先序)线索二叉树的递归算法。

【四川联合大学2000 三】【东南大学1999六(15分)】 70.写出中序线索二叉树的线索化过程(已知二叉树T)。

【山东大学 2000 五、2 (10分)】【长沙铁道学院 1997 五、6 (10分)】 71.已知一中序线索二叉树,写一算法完成对它的中序扫描。【山东大学2001软件与理论三(8分)】

72.已知中序线索二叉树T右子树不空。设计算法,将S所指的结点作为T的右子树中的一个叶子结点插入进去,并使之成为T的右子树的(中序序列)第一个结点(同时要修改相应的线索关系)。

【合肥工业大学 2001 五、2(8分)】

73.写出算法,求出中序线索二叉树中给定值为x的结点之后继结点,返回该后继结点的指针。线索树中结点结构为:(ltag,lc,data,rc,rtag)。其中,data存放结点的值;lc,rc为指向左、右孩子或该结点前驱或后继的指针;ltag,rtag为标志域,各值为:0,则lc,rc为指向左、右孩子的指针;值为1,则lc,rc为指向某前驱后继结点的指针。【北京邮电大学 1996 八(20分)】

74.设后序线索树中结点构造为(Ltag,Lchild,Data,Rchild,Rtag)。其中:Ltag,Rtag 值为0时,Lchild、Rchild 分别为儿子指针;否则分别为直接前驱,直接后继的线索。请写出在后序线索树上找给定结点p^ 的直接前驱q 的算法。【武汉交通科技大学 1996 四、1(13分)】

75.用算法说明在对称序穿线树中,如何对任意给定的结点直接找出该结点的对称序后继。

【山东大学 1999 六、3(10分)】

76.写出在中序线索二叉树里;找指定结点在后序下的前驱结点的算法。【河海大学1998七(10分)】 77.设中序穿线二叉树的结点由五个域构成:info:给出结点的数据场之值。LL:当LT 为1 时,则给出该结点的左儿子之地址,当LT为0时,则给出按中序遍历的前驱结点的地址。LT:标志域,为1或为0。RL:当RT为1时,则给出该结点的右儿子的地址;当RT为0时,则给出按中序遍历的后继结点地址。RT: 标志域为0或为1。

请编写程序,在具有上述结点结构的中序穿线二叉树上,求某一结点p的按后序遍历次序的后继结点的地址q,设该中序穿线二叉树的根结点地址为r。另外,请注意必须满足:(1)额外空间的使用只能为O(1),(2)程序为非递归。【上海交通大学 2000 十(20分)】 78.写出按后序序列遍历中序线索树的算法。【东南大学 2000 六(15分)】

79.给定一组项及其权值,假定项都存放于二叉树的树叶结点,则具有最小带权外部路径长度的树称为huffman 树。(1)给出构造huffman 树 的算法。(2)给定项及相应的权如下表:画出执行上述算法后得到的huffman树。(3)用c语言编写构造huffman 树的程序. 【浙江大学 2000 七 (18分)】

序号 1 2 3 4 5 6 7 8 9 向 A B C D E F G H I 15 6 7 12 25 4 6 1 15 80、二叉树T的中序遍历序列和层次遍历序列分别是BAFDGCE和ABCDEFG,试画出该二叉树(3分),并写出由二叉树的中序遍历序列和层次遍历序列确定二叉树的算法(5分)。

【烟台大学 2004 四、1(8分)】

第6章 树和二叉树

一、选择题 1.D 2.B 3.C 4.D 5.D 6.A 7.1C 7.2A 7.3C 7.4A 7.5C 8.B 9.C 10.D 11.B 12.E 13.D 14.D 15.C 16.B 17.C 18.C 19.B 20.D 21.A 22.A 23.C 24.C 25.C 26.C 27.C 28.C 29.B 30.C 31.D 32.B 33.A 34.D 35.B 36.B 37.C 38.B 39.B 40.B 41.1F 41.2B 42.C 43.B 44.C 45.C 46.B 47.D 48.B 49.C 50.A 51.C 52.C 53.C 54.D 55.C 56.B 57.A 58.D 59.D 60.B 61.1B 61.2A 61.3G 62.B 63.B 64.D 65.D 66.1C 66.2D 66.3F 66.4H 66.5I 部分答案解释如下。 12. 由二叉树结点的公式:n=n0+n1+n2=n0+n1+(n0-1)=2n0+n1-1, 因为n=1001,所以1002=2n0+n1,在完全二叉树树中,n1只能取0或1,在本题中只能取0,故n=501,因此选E。 42.前序序列是“根左右”,后序序列是“左右根”,若要这两个序列相反,只有单支树,所以本题的A和B均对,单支树的特点是只有一个叶子结点,故C是最合适的,选C。A或B都不全。由本题可解答44题。 47. 左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域。

52.线索二叉树是利用二叉树的空链域加上线索,n个结点的二叉树有n+1个空链域。 二、判断题 1.× 2.× 3.× 4. √ 5. √ 6. √ 7.√ 8.× 9. √ 10.× 11.× 12.× 13.× 14.√ 15.× 16.× 17.√ 18.√ 19.× 20.√ 21.× 22.√ 23.× 24.× 25.√ 26.× 27.× 28.× 29.√ 30.× 31.× 32.√ 33.× 34.× 35.× 36.√ 37.√ 38.× 39.× 40.× 41.(3) 42.√ 43.√ 44.× 45.√ 46.× 47.× 48.× 49.√ 50.√ 部分答案解释如下。

6.只有在确定何序(前序、中序、后序或层次)遍历后,遍历结果才唯一。 19.任何结点至多只有左子树的二叉树的遍历就不需要栈。

24. 只对完全二叉树适用,编号为i的结点的左儿子的编号为2i(2i<=n),右儿子是2i+1(2i+1<=n) 37. 其中序前驱是其左子树上按中序遍历的最右边的结点(叶子或无右子女),该结点无右孩子。

38 . 新插入的结点都是叶子结点。

42. 在二叉树上,对有左右子女的结点,其中序前驱是其左子树上按中序遍历的最右边的结点(该结点的后继指针指向祖先),中序后继是其右子树上按中序遍历的最左边的结点(该结点的前驱指针指向祖先)。 44.非空二叉树中序遍历第一个结点无前驱,最后一个结点无后继,这两个结点的前驱线索和后继线索为空指针。

三.填空题

1.(1)根结点(2)左子树(3)右子树 2.(1)双亲链表表示法(2)孩子链表表示法(3)孩子兄弟表示法 3.p->lchild==null && p->rchlid==null 4.(1) ++a*b3*4-cd (2)18 5.平衡因子

k-1kH-1H

6. 9 7. 12 8.(1)2 (2)2-1 9.(1)2 (2)2-1 (3)H=?log2N?+1 10. 用顺序存储二叉树时,要按完全二叉树的形式存储,非完全二叉树存储时,要加“虚结点”。设编号为i和j的结点在顺序存储中的下标为s 和t ,则结点i和j在同一层上的条件是?log2s?=?log2t?。 11. ?log2i?=?log2j? 12.(1)0 (2)(n-1)/2 (3)(n+1)/2 (4) ?log2n? +1 13.n

K+1k-2

14. N2+1 15.(1) 2-1 (2) k+1 16. ?N/2? 17. 2 18. 64 19. 99 20. 11 21.(1) n1-1 (2)n2+n3

k-2H-1H-1k-2

22.(1)2+1(第k层1个结点,总结点个数是2,其双亲是2/2=2)(2) ?log2i?+1 23.69

h-1

24. 4 25.3 26. ?n/2? 27. ?log2k?+1

28.(1)完全二叉树 (2)单枝树,树中任一结点(除最后一个结点是叶子外),只有左子女或只有右子女。 29.N+1 30.(1) 128(第七层满,加第八层1个) (2) 7

31. 0至多个。任意二叉树,度为1的结点个数没限制。只有完全二叉树,度为1的结点个数才至多为1。 32.21 33.(1)2 (2) n-1 (3) 1 (4) n (5) 1 (6) n-1

34.(1) FEGHDCB (2)BEF(该二叉树转换成森林,含三棵树,其第一棵树的先根次序是BEF)

35.(1)先序(2)中序 36. (1)EACBDGF (2)2 37.任何结点至多只有右子女的二叉树。 38.(1)a (2) dbe (3) hfcg 39.(1) .D.G.B.A.E.H.C.F. (2) ...GD.B...HE..FCA

40.DGEBFCA 41.(1)5 (2)略 42.二叉排序树 43.二叉树 44.前序 45.(1)先根次序(2)中根次序 46.双亲的右子树中最左下的叶子结点 47.2 48.(n+1)/2 49.31(x的后继是经x的双亲y的右子树中最左下的叶结点) 50.(1)前驱 (2)后继

51.(1)1 (2)y^.lchild (3)0 (4)x (5)1 (6) y (7)x(编者注:本题按中序线索化) 52.带权路径长度最小的二叉树,又称最优二叉树 53.69 54.(1)6 (2)261 55.(1)80 (2)001(不唯一)56.2n0-1

57.本题①是表达式求值,②是在二叉排序树中删除值为x的结点。首先查找x,若没有x,则结束。否则分成四种情况讨论:x结点有左右子树;只有左子树;只有右子树和本身是叶子。

(1)Postoder_eval(t^.Lchild) (2) Postorder_eval(t^.Rchild) (3)ERROR(无此运算符)(4)A (5)tempA^.Lchild (6)tempA=NULL (7)q^.Rchild (8)q (9)tempA^.Rchild (10)tempA^.Item

(2) IF (t=NIL) AND (m≤n) OR (t<>NIL) AND (m>n) THEN all:=false

ELSE BEGIN chk(t^.l,2*m);chk (t^.r,2*m+1);END

59. (1)p->rchild (2)p->lchild (3)p->lchild (4)ADDQ(Q,p->lchild) (5)ADDQ(Q,p->rchild) 60.(1)t->rchild!=null (2)t->rchild!=null (3)N0++ (4)count(t->lchild) (5)count(t->rchild) 61.(1)p (2)0 (3)height(p->lchild) (4)0 (5)height(p->rchild) (6)lh+1 (7)rh+1 (8)0 62.(1)p<>NIL (2)addx(p) (3)addx(tree) (4)r^.rchild

63.(1)stack[tp]=t (2) p=stack[tp--] (3)p (4)++tp 64.① 本算法将二叉树的左右子树交换

② (1)new (s) //初始化,申请结点 (2) s^.next=NIL //s是带头结点的链栈

(3)s^.next^.data //取栈顶元素 (4)s^.next:= p^.next //栈顶指针下移 (5)dispose(p) //回收空间 (6)p^.next:=s^.next //将新结点入链栈 (7)push(s,p^.rchild) //先沿树的左分支向下,将p的右子女入栈保存

(8)NOT empty(s) (9) finishe:=true //已完成 (10)finish=true (或s^.next=NIL)

65.(1)new(t) (2)2*i≤n (3)t^.lchild,2*i (4)2*i+1≤n (5)t^.rchild,2*i+1 (6)1 66.(1)Push(s,p) (2)K=2 (3)p->data=ch (4)BT=p (5) ins>>ch 67.(1)result; (2)p:=p^.link; (3) q:=q^.pre ((2)(3)顺序可变)

68.(1)top++ (2) stack[top]=p->rchild (3)top++ (4)stack[top]=p->lchild 69.(1)(i<=j) AND (x<=y) (2)A[i]<>B[k] (3)k-x

(4)creatBT(i+1,i+L,x,k-1,s^.lchild) (5) creatBT(i+L+1,j,k+1,y,s^.rchild) 70. (1)push(s,bt) (2)pop(s) (3)push(s,p^.rchild) // p的右子树进栈 71.(1) p=p->lchild // 沿左子树向下 (2)p=p->rchild 72.(1)0 (2)hl>hr (3)hr=hl

73. (1)top>0 (2)t*2 // 沿左分枝向下 (3)top-1 // 退栈 74.(1)p:=p^.lchild (2)(3)p:=S.data[s.top]^.rchild (4)s.top=0

75. (1)*ppos // 根结点 (2)rpos=ipos (3)rpos–ipos (4)ipos (5)ppos+1

76. (1)top>0 (2)stack[top]:=nd^.right (3)nd^.left<>NIL (4)top:=top+1 (左子树非空) 77. (1) p<>thr // 未循环结束 (2)p->ltag=0 (3)p->lchild

(4)p->rtag=1 && p->rchild!=thr (5) p=p->rchild (6)p=p->rchild 78. 若p^.rtag=1,则p^.rchild 为后继,否则p的后继是p的右子树中最左下的结点

(1)q=p^.rchild (2)q^.ltag=0 (3) q^.lchild 79.(1)tree->lchild (2)null (3)pre->rchild

(4)pre->rtag=1 (5) pre->right=tree; (6) tree->right (注(4)和(5)顺序可换) 80.(1)node->rflag==0 (2)*x=bt (3) *x=node->right 四.应用题

1.树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。

树和二叉树的区别有三:一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下, 也必须指出是左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。

2.树和二叉树逻辑上都是树形结构,区别有以上题1所述三点。二叉树不是树的特例。

3.线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说存在一(双亲)对多(子女)的关系。广义表中的元素既可以是原子,也可以是子表,子表可以为它表共享。从表中套表意义上说,广义表也是层次结构。从逻辑上讲,树和广义表均属非线性结构。但在以下意义上,又蜕变为线性结构。如度为1的树,以及广义表中的元素都是原 子时。另外,广义表从元素之间的关系可看成前驱和后继,也符 合线性表,但这时元素有原子,也有子表,即元素并不属于同一 数据对象。

4.方法有二。一是对该算术表达式(二叉树)进行后序遍历, 得到表达式的后序遍历序列,再按后缀表达式求值;二是递归 求出左子树表达式的值,再递归求出右子树表达式的值,最后 按根结点运算符(+、-、*、/ 等)进行最后求值。

5.该算术表达式转化的二叉树如右图所示。 第5题图

6.n(n>0)个结点的d度树共有nd个链域,除根结点外,每个结点均有一个指针所指,故该树的空链域有nd-(n-1)=n(d-1)+1个。

7.证明:设二叉树度为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)。 证毕。

h-1

8.(1)k(h为层数)

h-1

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

(3) 结点n(n>1)的前一结点编号为n-1(其最右边子女编号是(n-1)*k+1),故结点 n的第 i个孩子的

编号是(n-1)*k+1+i。

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

9.最低高度二叉树的特点是,除最下层结点个数不满外,其余各层的结点数都应达到各层的最大值。

h-1h

设n个结点的二叉树的最低高度是h,则n应满足2

n

10.2-1(本题等价于高度为n的满二叉树有多少叶子结点,从根结点到各叶子结点的单枝树是不同的二叉树。)

7-1

11.235。由于本题求二叉树的结点数最多是多少,第7层共有2=64个结点,已知有10个叶子,其余54个结点均为分支结点。它在第八层上有108个叶子结点。所以该二叉树的结点数最多可达7

(2-1+108)=235。(注意;本题并未明说完全二叉树的高度,但根据题意,只能8层。)

10

12.1023(=2-1)

13.证明:设度为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。

14.根据顺序存储的完全二叉树的性质,编号为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。 15.N个结点的K叉树,最大高度N(只有一个叶结点的任意k叉树)。设最小高度为H,第i(1<=i<=H)层

i-12H-1

的结点数K,则N=1+k+k+?+ k,由此得H=?logK(N(K-1)+1)?

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

17.设分枝结点和叶子结点数分别是为nk和n0,因此有n=n0+nk (1)

另外从树的分枝数B与结点的关系有 n=B+1=K*nk +1 (2) 由(1)和(2)有 n0=n-nk=(n(K-1)+1)/K

18.用顺序存储结构存储n个结点的完全二叉树。编号为i的结点,其双亲编号是?i/2?(i=1时无双亲),其左子女是2i(若2i<=n,否则i无左子女),右子女是2i+1(若2i+1<=n,否则无右子女)。

19. 根据完全二叉树的性质,最后一个结点(编号为n)的双亲结点的编号是?n/2?,这是最后一个分枝结点,在它之后是第一个终端(叶子)结点,故序号最小的叶子结点的下标是?n/2?+1。 20. 按前序遍历对顶点编号,即根结点从1开始,对前序遍历序列的结点从小到大编号。 21. 设树的结点数为n,分枝数为B,则下面二式成立

n=n0+n1+n2+?+nm (1) n=B+1= n1+2n2+?+mnm (2)

由(1)和(2)得叶子结点数n0=1+

22. ?log2n? +1 23.15

24. 该结论不成立。对于任一a

本文来源:https://www.bwwdw.com/article/1h2p.html

Top