搜档网
当前位置:搜档网 › 数据结构树和二叉树习题(有答案)

数据结构树和二叉树习题(有答案)

数据结构树和二叉树习题(有答案)
数据结构树和二叉树习题(有答案)

第六章 树和二叉树

一、选择题

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 .3. 设有一表示算术表达式的二叉树(见下图),

它所表示的算术表达式是( )

【南京理工大学1999 一、20(2分)】 A. A*B+C/(D*E)+(F-G) B. (A*B+C)/(D*E)+(F-G) 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分)】

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

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

A.11 B.10C.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=

A.m k-1 B.m k-1 C.m h-1 D.m h-1

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

24.高度为 K的二叉树最大的结点数为()。【山东大学 2001 二、3 (1分)】

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

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

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

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

i

i

i h

w

1最小的树,其中对

最优二叉树,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.二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况。

B.当K≥1时高度为K的二叉树至多有2k-1个结点。

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分)】

4.深度为K的二叉树中结点总数≤2k-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

25. 给定一棵树,可以找到唯一的一棵二叉树与之对应。【青岛大学 2001 一、5 (1分)】

26. 一棵树中的叶子数一定等于与其对应的二叉树的叶子数。【青岛大学 2002 一、5 (1分)】

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

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

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

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

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

30.在二叉树的第i层上至少有2i-1个结点(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分)】

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

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

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

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

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

(b)在一棵深度为k的二叉树中,最大结点数是2k-1+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

r^.Lchild:=tempA^.Lchild

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 Array j:= (6)__; createtree(p,j)

END; 【北京邮电大学 1998 五、 (15分)】

66.设一棵二叉树的结点定义为

struct BinTreeNode{

ElemType data; BinTreeNode *leftchild,*rightchild; }

现采用输入广义表表示建立二叉树。具体规定如下:

(1)树的根结点作为由子树构成的表的表名放在表的

最前面;

(2)每个结点的左子树和右子树用逗号隔开。若仅有

右子树没有左子树,逗号不能省略。

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

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

例如,对于如右图所示的二叉树,其广义表表示为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语言过程功能完全相同,任选其一),填充空格,使其成为完整的算法。

【同济大学 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

k=(3)_______;

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 指向其后继。

数据结构二叉树习题含答案

2.1 创建一颗二叉树 创建一颗二叉树,可以创建先序二叉树,中序二叉树,后序二叉树。我们在创建的时候为了方便,不妨用‘#’表示空节点,这时如果先序序列是:6 4 2 3 # # # # 5 1 # # 7 # #,那么创建的二叉树如下: 下面是创建二叉树的完整代码:穿件一颗二叉树,返回二叉树的根 2.2 二叉树的遍历 二叉树的遍历分为:先序遍历,中序遍历和后序遍历,这三种遍历的写法是很相似的,利用递归程序完成也是灰常简单的: 2.3 层次遍历 层次遍历也是二叉树遍历的一种方式,二叉树的层次遍历更像是一种广度优先搜索(BFS)。因此二叉树的层次遍历利用队列来完成是最好不过啦,当然不是说利用别的数据结构不能完成。 2.4 求二叉树中叶子节点的个数 树中的叶子节点的个数= 左子树中叶子节点的个数+ 右子树中叶子节点的 个数。利用递归代码也是相当的简单, 2.5 求二叉树的高度 求二叉树的高度也是非常简单,不用多说:树的高度= max(左子树的高度,右子树的高度) + 1 2.6 交换二叉树的左右儿子 交换二叉树的左右儿子,可以先交换根节点的左右儿子节点,然后递归以左右儿子节点为根节点继续进行交换。树中的操作有先天的递归性。。 2.7 判断一个节点是否在一颗子树中 可以和当前根节点相等,也可以在左子树或者右子树中。 2.8 求两个节点的最近公共祖先 求两个节点的公共祖先可以用到上面的:判断一个节点是否在一颗子树中。(1)如果两个节点同时在根节点的右子树中,则最近公共祖先一定在根节点的右子树中。(2)如果两个节点同时在根节点的左子树中,则最近公共祖先一定在根节点的左子树中。(3)如果两个节点一个在根节点的右子树中,一个在根节点的

数据结构中二叉树中序遍历的教学分析

数据结构中二叉树中序遍历的教学分析 袁宇丽, 胡 玲 Ξ(内江师范学院计算机与信息科学系, 四川 内江 641112) 摘 要:数据结构的教学应注重方法的应用,在二叉树的中序遍历中使用投影法可以使遍历过程简单化, 再由其中的一种遍历递归算法(先序)推导得到另外两种(中序,后序)的遍历递归算法,让学生加深对整个遍 历过程的了解与掌握。 关键词:数据结构;二叉树;遍历;算法 中图分类号:G 642 文献标识码:A 文章编号:1671-1785(2006)04-0109-03 1 引言 《数据结构》是计算机学科的一门专业技术基础课,也是计算机程序设计的重要理论技术基础课。目的是在于让学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据结构选择适当的逻辑结构,存储结构及其相应的算法;并初步掌握算法的时间分析和空间分析的技术;培养学生进行复杂程序设计的能力和数据抽象的能力。但从学生角度而言,在学习该门课程时普遍反映较难,总觉得课程内容抽象,不易理解,好些具体算法不知从何下手。针对以上情况,任课教师在讲授该门课程时更应注重方法的应用,从多角度,多侧面展现知识点,化抽象为具体,化特殊为一般,不应只局限于教材上的一种解题模式,应结合自己的理解,补充新方法,这样才能更好的拓宽学生的思路,达到化难为易,举一反三的效果。下面以具体实例说明。 2 二叉树中序遍历的投影法 在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理。这就提出了一个遍历二叉树的问题,即如何按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。“访问”的含义很广,可以是对结点作各种处理,如输出结点的信息等。遍历对线性结构来说,是一个容易解决的问题。而对二叉树则不然,由于二叉树是一种非线性结构,每个结点都可能有两棵子树,因而需要寻找一种规律,以便使二叉树上的结点能排列在一个线性队列上,从而便于访问。 回顾二叉树的定义可知,二叉树是由三个基本单元组成:根结点、左子树、右子树。因此,若能依次遍历这三部分,便是遍历了整个二叉树。若限定先左后右的顺序,则分为三种情况:先(根)序遍历,中(根)序遍历,后(根)序遍历。二叉树的遍历及其应用是数据结构中一个很重要的知识点,要求学生能根据所给二叉树得到相应的三种遍历序列(前序,中序,后序),并能写出这三种遍历算法。以中序遍历而言,教材[1]结合图给出了中序遍历过程示意图,并具体分析了该遍历的递归执行过程。但递归调用及返回对学生来说本身就是一个较难掌握的知识,往往出现进入递归后不知怎样层层返回,所图1 二叉树 以书上在说明二叉树的中序遍历时借用递归调用与返回的 方法向学生展示整个遍历过程对初学者总感觉有一定难度。 我们在这里补充一种教材上没有提到的二叉树中序遍历的 直观方法:投影法。分析中序遍历的实质,是按先中序访问左子树,再访问根结点,最后中序访问右子树的顺序进行的。直 观上想,处于二叉树最左下方的结点应该是第一个要访问的结点,再结合二叉树本身的构造特点,是有严格的左右子树 之分的,所以投影法就是根据二叉树的结构特征得来的。对 于一棵二叉树,从根结点所在的层开始,将所有非空左子树 完全位于当前根结点的左方,将所有非空右子树完全位于当? 901?第21卷第4期N o 14V o l 121 内江师范学院学报JOU RNAL O F N E I J I AN G T EA CH ER S COLL EGE 收稿日期:2005-11-11  作者简介:袁字丽(1979-),女,四川自贡人,内江师范学院助教,硕士。

数据结构树和二叉树实验报告

《数据结构》课程实验报告 实验名称树和二叉树实验序号 5 实验日期 姓名院系班级学号 专业指导教师成绩 教师评语 一、实验目的和要求 (1)掌握树的相关概念,包括树、结点的度、树的度、分支结点、叶子结点、儿子结点、双亲结点、树 的深度、森林等定义。 (2)掌握树的表示,包括树形表示法、文氏图表示法、凹入表示法和括号表示法等。 (3)掌握二叉树的概念,包括二叉树、满二叉树和完全二叉树的定义。 (4)掌握二叉树的性质。 (5)重点掌握二叉树的存储结构,包括二叉树顺序存储结构和链式存储结构。 (6)重点掌握二叉树的基本运算和各种遍历算法的实现。 (7)掌握线索二叉树的概念和相关算法的实现。 (8)掌握哈夫曼树的定义、哈夫曼树的构造过程和哈夫曼编码产生方法。 (9)掌握并查集的相关概念和算法。 (10)灵活掌握运用二叉树这种数据结构解决一些综合应用问题。 二、实验项目摘要 1.编写一程序,实现二叉树的各种基本运算,并在此基础上设计一个主程序完成如下功能: (1)输出二叉树b; (2)输出H结点的左、右孩子结点值; (3)输出二叉树b的深度; (4)输出二叉树b的宽度; (5)输出二叉树b的结点个数; (6)输出二叉树b的叶子结点个数。 2.编写一程序,实现二叉树的先序遍历、中序遍历和后序遍历的各种递归和非递归算法,以及层次遍历的算法。 三、实验预习内容 二叉树存储结构,二叉树基本运算(创建二叉树、寻找结点、找孩子结点、求高度、输出二叉树)

三、实验结果与分析 7-1 #include #include #define MaxSize 100 typedef char ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild; } BTNode; void CreateBTNode(BTNode *&b,char *str) { BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; ch=str[j]; while (ch!='\0') { switch(ch) { case '(':top++;St[top]=p;k=1; break; case ')':top--;break; case ',':k=2; break; default:p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch;p->lchild=p->rchild=NULL; if (b==NULL) b=p; else { switch(k) { case 1:St[top]->lchild=p;break; case 2:St[top]->rchild=p;break; } } } j++; ch=str[j]; }

数据结构二叉树实验报告

实验三二叉树的遍历 一、实验目的 1、熟悉二叉树的结点类型和二叉树的基本操作。 2、掌握二叉树的前序、中序和后序遍历的算法。 3、加深对二叉树的理解,逐步培养解决实际问题的编程能力。 二、实验环境 运行C或VC++的微机。 三、实验内容 1、依次输入元素值,以链表方式建立二叉树,并输出结点的值。 2、分别以前序、中序和后序遍历二叉树的方式输出结点内容。 四、设计思路 1. 对于这道题,我的设计思路是先做好各个分部函数,然后在主函数中进行顺序排列,以此完成实验要求 2.二叉树采用动态数组 3.二叉树运用9个函数,主要有主函数、构建空二叉树函数、建立二叉树函数、访问节点函数、销毁二叉树函数、先序函数、中序函数、后序函数、范例函数,关键在于访问节点 五、程序代码 #include #include #include #define OK 1 #define ERROR 0 typedef struct TNode//结构体定义 {

int data; //数据域 struct TNode *lchild,*rchild; // 指针域包括左右孩子指针 }TNode,*Tree; void CreateT(Tree *T)//创建二叉树按,依次输入二叉树中结点的值 { int a; scanf("%d",&a); if(a==00) // 结点的值为空 *T=NULL; else // 结点的值不为空 { *T=(Tree)malloc(sizeof(TNode)); if(!T) { printf("分配空间失败!!TAT"); exit(ERROR); } (*T)->data=a; CreateT(&((*T)->lchild)); // 递归调用函数,构造左子树 CreateT(&((*T)->rchild)); // 递归调用函数,构造右子树 } } void InitT(Tree *T)//构建空二叉树 { T=NULL; } void DestroyT(Tree *T)//销毁二叉树 { if(*T) // 二叉树非空 { DestroyT(&((*T)->lchild)); // 递归调用函数,销毁左子树 DestroyT(&((*T)->rchild)); // 递归调用函数,销毁右子树 free(T); T=NULL; } } void visit(int e)//访问结点 { printf("%d ",e); }

数据结构树练习题

数据结构-树练习题 一、选择题 1、二叉树的深度为k,则二叉树最多有( C )个结点。 A. 2k B. 2k-1 C. 2k-1 D. 2k-1 2、用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组R[1..N]中,若结点R[i]有右孩子,则其右孩子是( B )。 A. R[2i-1] B. R[2i+1] C. R[2i] D. R[2/i] 3、设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前面的条件是( B )。 A. a在b的右方 B. a在b的左方 C. a是b的祖先 D. a是b的子孙 4、设一棵二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树先序遍历序列为()。 A. adbce B. decab C. debac D. abcde 5、在一棵具有5层的满二叉树中结点总数为( A )。 A. 31 B. 32 C. 33 D. 16 6、由二叉树的前序和后序遍历序列( B )惟一确定这棵二叉树。 A. 能 B. 不能 7、某二叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左子树中结点数目为( C )。 A. 3 B. 2 C. 4 D. 5 8、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为( C )。 A. 67 B. 68 C. 69 D. 70 9、将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为(A )。 A. 98 B. 99 C. 50 D. 48 10、表达式a*(b+c)-d的后缀表达式是( B )。 A. abcd+- B. abc+*d- C. abc*+d- D. -+*abcd 11、对某二叉树进行先序遍历的结果为ABDEFC,中序遍历的结果为DBFEAC,则后序遍历的结果是( B )。 A. DBFEAC B. DFEBCA C. BDFECA D. BDEFAC 12、树最适合用来表示( C )。 A. 有序数据元素 B. 无序数据元素 C. 元素之间具有分支层次关系的数据 D. 元素之间无联系的数据 13、表达式A*(B+C)/(D-E+F)的后缀表达式是( C ) A. A*B+C/D-E+F B. AB*C+D/E-F+ C. ABC+*DE-F+/ D. ABCDED*+/-+ 14、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序()。 A. 不发生改变 B. 发生改变 C. 不能确定 D. 以上都不对 15、假定在一棵二叉树中,度为2的结点数为15,度为1的结点数为30,则叶子结点数为()个。 A. 15 B. 16 C. 17 D. 47 16、由权值为3,6,7,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为()。 A. 51 B. 23 C. 53 D. 74

数据结构 二叉树练习题答案

数据结构第6章树和二叉树 一、下面是有关二叉树的叙述,请判断正误 (√)1.若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n-1个非空指针域。 n个结点的二叉树有n-1条分支 (×)2.二叉树中每个结点的两棵子树的高度差等于1。 (√)3.二叉树中每个结点的两棵子树是有序的。 (×)4.二叉树中每个结点有两棵非空子树或有两棵空子树。 (×)5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树 (若存在的话)所有结点的关键字值。 (应当是二叉排序树的特点) (×)6.二叉树中所有结点个数是2k-1-1,其中k是树的深度。(应2k-1) (×)7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。 (×)8.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i -1个结点。

(应2i-1) (√)9.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。(用二叉链表存储包含n个结点的二叉树,结点共有2n个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有n-1个结点的链域存放指向非空子女结点的指针,即有后继链接的指针仅n-1个,还有n+1个空指针。)采用二叉链表存储有2n个链域,空链域为:2n-(n-1)=n+1 (√)10.具有12个结点的完全二叉树有5个度为2的结点。 最快方法:用叶子数=[ n/2] =6,再求n2=n0-1=5 [n/2] 除的结果四舍五入 二、填空 1.由3个结点所构成的二叉树有5种形态。 2. 一棵深度为6的满二叉树有n1+n2=0+ n2= n0-1=31 个分支结点和26-1 =32个叶子。 注:满二叉树没有度为1的结点,所以分支结点数就是二度结点数。 (或:总结点数为n=2k-1=26-1=63,叶子数为n0= [ n/2] =32,满二叉数没有度为1的结点,由n0=n2+1得n2=n0-1=32-1=31)

第六章树和二叉树习题数据结构

习题六树和二叉树 一、单项选择题 1.以下说法错误的是 ( ) A.树形结构的特点是一个结点可以有多个直接前趋 B.线性结构中的一个结点至多只有一个直接后继 C.树形结构可以表达(组织)更复杂的数据 D.树(及一切树形结构)是一种"分支层次"结构 E.任何只含一个结点的集合是一棵树 2.下列说法中正确的是 ( ) A.任何一棵二叉树中至少有一个结点的度为2 B.任何一棵二叉树中每个结点的度都为2 C.任何一棵二叉树中的度肯定等于2 D.任何一棵二叉树中的度可以小于2 3.讨论树、森林和二叉树的关系,目的是为了() A.借助二叉树上的运算方法去实现对树的一些运算 B.将树、森林按二叉树的存储方式进行存储 C.将树、森林转换成二叉树 D.体现一种技巧,没有什么实际意义 4.树最适合用来表示 ( ) A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定 6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B.M1+M2 C.M3 D.M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是() A. 250 B. 500 C.254 D.505 E.以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( ) A.不确定 B.2n C.2n+1 D.2n-1 9.二叉树的第I层上最多含有结点数为() A.2I B. 2I-1-1 C. 2I-1 D.2I -1 10.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+1 11. 利用二叉链表存储树,则根结点的右指针是()。 A.指向最左孩子 B.指向最右孩子 C.空 D.非空 14.在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序()A.都不相同 B.完全相同 C.先序和中序相同,而与后序不同 D.中序和后序相同,而与先序不同 15.在完全二叉树中,若一个结点是叶结点,则它没()。 A.左子结点 B.右子结点 C.左子结点和右子结点 D.左子结点,右子结点和兄弟结点 16.在下列情况中,可称为二叉树的是()

目前最完整的数据结构1800题包括完整答案树和二叉树答案

第6章树和二叉树 部分答案解释如下。 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个空链域。 部分答案解释如下。 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.平衡 因子 6. 9 7. 12 8.(1)2k-1 (2)2k-1 9.(1)2H-1 (2)2H-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 14. N2+1 15.(1) 2K+1-1 (2) k+1 16. ?N/2? 17. 2k-2 18. 64 19. 99 20. 11 21.(1) n1-1 (2)n2+n3 22.(1)2k-2+1(第k层1个结点,总结点个数是2H-1,其双亲是2H-1/2=2k-2)(2) ?log2i?+1 23.69 24. 4 25.3h-1 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) . (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

数据结构实验报告-二叉树的实现与遍历

《数据结构》第六次实验报告 学生姓名 学生班级 学生学号 指导老师

一、实验内容 1) 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序 以及按层次遍历的操作,求所有叶子及结点总数的操作。 2) 输出树的深度,最大元,最小元。 二、需求分析 遍历二叉树首先有三种方法,即先序遍历,中序遍历和后序遍历。 递归方法比较简单,首先获得结点指针如果指针不为空,且有左子,从左子递归到下一层,如果没有左子,从右子递归到下一层,如果指针为空,则结束一层递归调用。直到递归全部结束。 下面重点来讲述非递归方法: 首先介绍先序遍历: 先序遍历的顺序是根左右,也就是说先访问根结点然后访问其左子再然后访问其右子。具体算法实现如下:如果结点的指针不为空,结点指针入栈,输出相应结点的数据,同时指针指向其左子,如果结点的指针为空,表示左子树访问结束,栈顶结点指针出栈,指针指向其右子,对其右子树进行访问,如此循环,直至结点指针和栈均为空时,遍历结束。 再次介绍中序遍历: 中序遍历的顺序是左根右,中序遍历和先序遍历思想差不多,只是打印顺序稍有变化。具体实现算法如下:如果结点指针不为空,结点入栈,指针指向其左子,如果指针为空,表示左子树访问完成,则栈顶结点指针出栈,并输出相应结点的数据,同时指针指向其右子,对其右子树进行访问。如此循环直至结点指针和栈均为空,遍历结束。 最后介绍后序遍历: 后序遍历的顺序是左右根,后序遍历是比较难的一种,首先需要建立两个栈,一个用来存放结点的指针,另一个存放标志位,也是首先访问根结点,如果结点的指针不为空,根结点入栈,与之对应的标志位也随之入标志位栈,并赋值0,表示该结点的右子还没有访问,指针指向该结点的左子,如果结点指针为空,表示左子访问完成,父结点出栈,与之对应的标志位也随之出栈,如果相应的标志位值为0,表示右子树还没有访问,指针指向其右子,父结点再次入栈,与之对应的标志位也入栈,但要给标志位赋值为1,表示右子访问过。如果相应的标志位值为1,表示右子树已经访问完成,此时要输出相应结点的数据,同时将结点指针赋值为空,如此循环直至结点指针和栈均为空,遍历结束。 三、详细设计 源代码:

树和二叉树习题数据结构

树和二叉树习题数据结 构 标准化管理处编码[BBX968T-XBB8968-NNJ668-MM9N]

习题六树和二叉树一、单项选择题 1.以下说法错误的是 ( ) A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继 C.树形结构可以表达(组织)更复杂的数据 D.树(及一切树形结构)是一种"分支层次"结构 E.任何只含一个结点的集合是一棵树 2.下列说法中正确的是 ( ) A.任何一棵二叉树中至少有一个结点的度为2 B.任何一棵二叉树中每个结点的度都为2 C.任何一棵二叉树中的度肯定等于2 D.任何一棵二叉树中的度可以小于2 3.讨论树、森林和二叉树的关系,目的是为了()A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储 C.将树、森林转换成二叉树

D.体现一种技巧,没有什么实际意义 4.树最适合用来表示 ( ) A.有序数据元素 B.无序数据元素 C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是() A.9 B.11 C.15 D.不确定 6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B.M1+M2 C.M3 D.M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A. 250 B. 500 C.254 D.505 E.以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( ) A.不确定 B.2n C.2n+1 D.2n-1 9.二叉树的第I层上最多含有结点数为() A.2I B. 2I-1-1 C. 2I-1 D.2I -1 10.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点

数据结构树和二叉树习题

树与二叉树 一.选择题 1.假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结 点数为()个。 A.15B.16C.17D.47 2.按照二叉树的定义,具有3个结点的不同形状的二叉树有()种。 A. 3 B. 4 C. 5 D. 6 3.按照二叉树的定义,具有3个不同数据结点的不同的二叉树有()种。 A. 5 B. 6 C. 30 D. 32 4.深度为5的二叉树至多有()个结点。1 A. 16 B. 32 C. 31 D. 10 5.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的 结点数至少为()。 A. 2h B. 2h-1 C. 2h+1 D. h+1 6.对一个满二叉树2,m个树叶,n个结点,深度为h,则()。 A. n=h+m3 B. h+m=2n C. m=h-1 D. n=2 h-1 1深度为n的二叉树结点至多有2n-1 2满二叉树是除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树7.任何一棵二叉树的叶结点在先序.中序和后序遍历序列中的相对次序()。 A.不发生改变 B.发生改变 C.不能确定 D.以上都不对 8.如果某二叉树的前根次序遍历结果为stuwv,中序遍历为uwtvs,那么该二叉 树的后序为()。 A. uwvts B. vwuts C. wuvts D. wutsv 9.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是 dgbaechf,则其后序遍历的结点访问顺序是()。 A. bdgcefha B. gdbecfha C. bdgaechf D. gdbehfca 10.在一非空二叉树的中序遍历序列中,根结点的右边()。 A. 只有右子树上的所有结点 B. 只有右子树上的部分结点 C. 只有左子树上的部分结点 D. 只有左子树上的所有结点 11.树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为 先序遍历.中序遍历和后序遍历。这里,我们把由树转化得到的二叉树4叫做这棵数对应的二叉树。结论()是正确的。 A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同 B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同 3对于深度为h的满二叉树,n=20+21+…+2h-1=2h-1,m=2h-1。故而n=h+m。 4树转化为二叉树的基本方法是把所有兄弟结点都用线连起来,然后去掉双亲到子女的连线,只留下双亲到第一个子女的连线。因此原来的兄弟关系就变为双亲与右孩子的关系。 1/ 9

数据结构实验-二叉树的操作

******************************* 实验题目:二叉树的操作 实验者信息:班级13007102,姓名庞文正,学号1300710226 实验完成的时间3:00 ****************************** 一、实验目的 1,掌握二叉树链表的结构和二叉树的建立过程。 2,掌握队列的先进先出的运算原则在解决实际问题中的应用。 3,进一步掌握指针变量、指针数组、动态变量的含义。 4,掌握递归程序设计的特点和编程方法。 二、实验内容 已知以二叉链表作存储结构,试编写按层次遍历二叉树的算法。(所谓层次遍历,是指从二叉树的根结点开始从上到下逐层遍历二叉树,在同一层次中从左到右依次访问各个节点。)调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加深对算法的理解。 三、算法设计与编码 1.本实验用到的理论知识 总结本实验用到的理论知识,实现理论与实践相结合。总结尽量简明扼要,并与本次实验密切相关,最好能加上自己的解释。 本算法要采用一个循环队列que,先将二叉树根结点入队列,然后退队列,输出该结点;若它有左子树,便将左子树根结点入队列;若它有右子树,便将右子树根结点入队列,直到队列空为止。因为队列的特点是先进先出,从而达到按层次顺序遍历二叉的目的。2.算法概要设计 给出实验的数据结构描述,程序模块、功能及调用关系 #include #include #define M 100 typedef struct node //二叉链表节点结构 {int data; //数据域 struct node *lchild,*rchild; //左孩子右孩子链 }bitree; bitree *que[M]; //定义一个指针数组,说明队列中的元素bitree 指针类型 int front=0, rear=0; //初始化循环列队 bitree *creat() //建立二叉树的递归算法 {bitree *t; int x; scanf("%d",&x); if(x==0) t=NULL; //以x=0 表示输入结束 else {t=malloc(sizeof(bitree)); //动态生成节点t,分别给节点t 的数据域,t->data=x; //左右孩子域赋值,给左右孩子赋值时用到 t->lchild=creat(); // 了递归思想 t->rchild=creat(); }

数据结构 习题 第六章 树和二叉树

第六章 树和二叉树 一、选择题 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 .3. 设有一表示算术表达式的二叉树(见下图), 它所表示的算术表达式是( ) 【南京理工大学1999 一、20(2分)】 A. A*B+C/(D*E)+(F-G) B. (A*B+C)/(D*E)+(F-G) 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

数据结构之二叉树概述

数据结构之二叉树 第一篇:数据结构之链表 第二篇:数据结构之栈和队列 在这篇文章里面,我们主要探讨和树相关的话题。 首先,我们来对树进行定义:树是n(n>= 0)个节点的有限集。在任何一个非空树中:(1)有且仅有一个特定的称为“根”的节点;(2)当n>1时,其余节点可分为m(m>0)个互相相关的有限集T1、T2、T3……,其中每一个集合本身又是一棵树,并且称为根的子树。 对于我们这篇文章里讨论的二叉树,它是一种特殊的树形结构,每个节点至多只有两颗子树,并且子树有左右之分,其次序不能随意颠倒。 接下来,我们使用java代码来定义一棵树: 1public class BinNode { 2private int m_Value; 3private BinNode m_Left; 4private BinNode m_Right; 5public void setValue(int m_Value) { 6this.m_Value = m_Value; 7 } 8public int getValue() { 9return m_Value; 10 } 11public void setLeft(BinNode m_Left) { 12this.m_Left = m_Left; 13 } 14public BinNode getLeft() { 15return m_Left; 16 } 17public void setRight(BinNode m_Right) { 18this.m_Right = m_Right; 19 } 20public BinNode getRight() { 21return m_Right; 22 } 23 24public boolean isLeaf() 25 { 26return m_Left == null && m_Right == null; 27 } 28 }

数据结构实验报告之树与二叉树

学生实验报告 学院:软通学院 课程名称:数据结构与算法 专业班级:软件142 班 姓名:邹洁蒙 学号: 0143990

学生实验报告 (二) 一、实验综述 1、实验目的及要求 目的:1)掌握树与二叉树的基本概念; 2)掌握二叉树的顺序存储,二叉链表的先序遍历中序遍历和后序遍历算法; 3)掌握树的双亲表示法。 要求:1)编程:二叉树的顺序存储实现; 2)编程:二叉链表的先序遍历中序遍历和后序遍历实现; 3)编程:树的双亲表示法实现。 2、实验仪器、设备或软件 设备:PC 软件:VC6 二、实验过程(编程,调试,运行;请写上源码,要求要有注释) 1.编程:二叉树的顺序存储实现 代码: BiTree::BiTree()//建立存储空间 { data = new int[MAXSIZE]; count = 0; } void BiTree::AddNode(int e)//加结点 { int temp = 0; data[count] = e; count++;//从编号0开始保存 }

运行截图: 2.编程:二叉链表的先序遍历中序遍历和后序遍历实现代码: void InOrderTraverse(BiTree* Head)//中序遍历 { if (Head) { InOrderTraverse(Head->LeftChild); cout << Head->data<<" "; InOrderTraverse(Head->RightChild); } } void PreOrderTraverse(BiTree* Head)//先序遍历 { if (Head) { cout << Head->data << " "; PreOrderTraverse(Head->LeftChild); PreOrderTraverse(Head->RightChild); } } void PostOrderTraverse(BiTree* Head)//后序遍历 { if (Head) { PostOrderTraverse(Head->LeftChild); PostOrderTraverse(Head->RightChild); cout << Head->data << " "; } } 运行截图:

数据结构实验报告—二叉树

算法与数据结构》课程实验报告

一、实验目的 1、实现二叉树的存储结构 2、熟悉二叉树基本术语的含义 3、掌握二叉树相关操作的具体实现方法 二、实验内容及要求 1. 建立二叉树 2. 计算结点所在的层次 3. 统计结点数量和叶结点数量 4. 计算二叉树的高度 5. 计算结点的度 6. 找结点的双亲和子女 7. 二叉树前序、中序、后序遍历的递归实现和非递归实现及层次遍历 8. 二叉树的复制 9. 二叉树的输出等 三、系统分析 (1)数据方面:该二叉树数据元素采用字符char 型,并且约定“ #”作为二叉树输入结束标识符。并在此基础上进行二叉树相关操作。 (2)功能方面:能够实现二叉树的一些基本操作,主要包括: 1. 采用广义表建立二叉树。 2. 计算二叉树高度、统计结点数量、叶节点数量、计算每个结点的度、结点所在层次。 3. 判断结点是否存在二叉树中。 4. 寻找结点父结点、子女结点。 5. 递归、非递归两种方式输出二叉树前序、中序、后序遍历。 6. 进行二叉树的复制。 四、系统设计 (1)设计的主要思路 二叉树是的结点是一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树、互不相交的二叉树组成。根据实验要求,以及课上老师对于二叉树存储结构、基本应用的讲解,同时课后研究书中涉及二叉树代码完成二叉树模板类,并将所需实现各个功能代码编写完成,在建立菜单对功能进行调试。 (2)数据结构的设计 二叉树的存储结构有数组方式和链表方式。但用数组来存储二叉树有可能会消耗大量的存储空间,故在此选用链表存储,提高存储空间的利用率。根据二叉树的定义,二叉

数据结构实验-二叉树的操作

******************************* 实验题目:二叉树的操作 实验者信息:班级 13007102,姓名 庞文正,学号 1300710226 实验完成的时间 3:00 ****************************** 一、 实验目的 1, 掌握二叉树链表的结构和二叉树的建立过程。 2, 掌握队列的先进先出的运算原则在解决实际问题中的应用。 3, 进一步掌握指针变量、指针数组、动态变量的含义。 4, 掌握递归程序设计的特点和编程方法。 二、 实验内容 已知以二叉链表作存储结构,试编写按层次遍历二叉树的算法。 (所谓层次遍历,是 指从二叉树的根结点开始从上到下逐层遍历二叉树, 在同一层次中从左到右依次访问各个节 点。)调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果。加 深对算法的理解。 三、 算法设计与编码 1. 本实验用到的理论知识 总结本实验用到的理论知识, 实现理论与实践相结合。 总结尽量简明扼要, 并与本次实验密 切相关,最好能加上自己的解释。 本算法要采用一个循环队列 que,先将二叉树根结点入队列,然后退队列,输出该 结点;若它 有左子树,便将左子树根结点入队列; 若它有右子树,便将右子树根结点入队列, 直到队列空为止。因为队列的特点是先进先出,从而达到按层次顺序遍历二叉的目的。 2. 算法概要设计 给出实验的数据结构描述,程序模块、功能及调用关系 #include #include #define M 100 typedef struct node //二叉链表节点结构 {int data; // 数据域 struct node *lchild,*rchild; }bitree; bitree *que[M]; //定义一个指针数组,说明队列中的元素 int front=0, rear=0; 〃初始化循环列队 bitree *creat() 〃建立二叉树的递归算法 {bitree *t; int x; scanf("%d”,&x); if(x==0) t=NULL; 〃以 else {t=malloc(sizeof(bitree)); t->data=x; t->lchild=creat(); t->rchild=creat(); //左孩子右孩子链 x=0表示输入结束 bitree 指针类型 〃动态生成节点t,分别给节点t 的数据域, //左右孩子域赋值,给左右孩子赋值时用到 // 了递归思想

相关主题