02一选择题:1、以下说法错误的是
①树形结构的特点是一个结点可以有多个直接前趋
②线性结构中的一个结点至多只有一个直接后继③树形结构可以表达(组织)更复杂的数据④树(及一切树形结构)是一种"分支层次"结构⑤任何只含一个结点的集合是一棵树
2.深度为6的二叉树最多有( )个结点①64 ②63 ③32 ④31
3 下列说法中正确的是
①任何一棵二叉树中至少有一个结点的度为2
②任何一棵二叉树中每个结点的度都为2 二叉树可空
③任何一棵二叉树中的度肯定等于2 ④任何一棵二叉树中的度可以小于2
4 设森林T中有4棵树,第一、二、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成一棵二叉树后,且根结点的右子树上有()个结点。
①n1-1 ②n1③n1+n2+n3④n2+n3+n4
二.名词解释:1 结点的度 3。叶子 4。分支点 5。树的度
三填空题二叉树第i(i>=1)层上至多有_____个结点。
1、深度为k(k>=1)的二叉树至多有_____个结点。
2、如果将一棵有n个结点的完全二叉树按层编号,则对任一编号为i(1<=i<=n)的结点X
有:若i=1,则结点X是_ ____;若i〉1,则X的双亲PARENT(X)的编号为__ ____。
若2i>n,则结点X无_ _____且无_ _____;否则,X的左孩子LCHILD(X)的编号为____。若2i+1>n,则结点X无__ ____;否则,X的右孩子RCHILD(X)的编号为_____。
4.以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句。
Void countleaf(bitreptr t,int *count)/*根指针为t,假定叶子数count的初值为0*/ {if(t!=NULL)
{if((t->lchild==NULL)&&(t->rchild==NULL))__ __;
countleaf(t->lchild,&count);
countleaf(t->rchild,&count);}
}
5 先根遍历树和先根遍历与该树对应的二叉树,其结果_____。
6 由____转换成二叉树时,其根结点的右子树总是空的。
7 哈夫曼树是带权路径度___ _____的树,通常权值较大的结点离根__ ______。
8
一棵树的形状如图填空题33所示,它的根结点是_____,叶子结点是______,结点H的度是_____,这棵树的度是_____,这棵树的深度是________,结点F的儿子结点是______,结点G的父结点是_____。
9任意一棵具有n个结点的二叉树,若它有m个叶子,则该二叉树上度数为1的结点为_____ ___个。
1.由3个结点所构成的二叉树有种形态。
2. 一棵深度为6的满二叉树有个分支结点和个叶子。
3.一棵具有257个结点的完全二叉树,它的深度为。
4. 设一棵完全二叉树具有1000个结点,则此完全二叉树有(100-511)= 个叶子结点,有个度为2的结点,有个结点只有非空左子树,有个结点只有非空右子树。
5. 二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按N L R次序),后序法(即按次序)和中序法(也称对称序法,即按L N R次序)。这三种方法相互之间有关联。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是。
6. 用5个权值{3, 2, 4, 5, 1}构造的哈夫曼(Huffman)树的带权路径长度是。
7.一个深度为h的二叉树最多有结点,最少有结点。
二、选择题1.二叉树是非线性数据结构,所以。
(A)它不能用顺序存储结构存储; (B)它不能用链式存储结构存储; (C)顺序存储结构和链式存储结构都能存储; (D)顺序存储结构和链式存储结构都不能使用2. 具有n(n>0)个结点的完全二叉树的深度为。
(A) ?log2(n)? (B) ? log2(n)? (C) ? log2(n) ?+1 (D) ?log2(n)+1?
3.把一棵树转换为二叉树后,这棵二叉树的形态是。(A)唯一的(B)有2种(C)有多种,但根结点都没有左孩子(D)有多种,但根结点都没有右孩子
4. 树是结点的有限集合,它根结点,记为T。其余的结点分成为m(m≥0)个
的集合T1,T2,…,Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点(1≤i≤m)。一个结点的子结点个数为该结点的。
供选择的答案
A:①有0个或1个②有0个或多个③有且只有1个④有1个或1个以上B: ①互不相交②允许相交③允许叶结点相交④允许树枝结点相交C:①权②度③次数④序
答案:A= B= C=
三、简答题1. 给定如图所示二叉树T
,请画出与其对应的中序线索二叉树。
1、如图所示的4棵二叉树中,()不是完全二叉树。
2、在线索化二叉树中,t所指结点没有左子树的充要条件是()。
A、t->left==NULL
B、t->ltag==1
C、t->ltag==1且t->left==NULL
D、以上都不对
3、已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是()
A、acbed
B、decab
C、deabc
D、cedba
4、如果T2是由有序树T转换而来的二叉树,那么T中结点的后序就是T2中结点的()
A、前序
B、中序
C、后序
D、层次序
5、对一个满二叉树,m个树叶,n个结点,深度为h,则()
A、n=h+m
B、h+m=2n
C、m=h-1
D、n=2(h次方)-1
6、具有5层结点的二叉平衡树至少有()个结点。A、10 B、12 C、15 D、17
二、填空题1、结点最少的树为____,结点最少的二叉树为_____。
2、从概念上讲,树与二叉树是两种不同的数据结构,将树转化为二叉树的基本目的是_____。
三、问答题1、假设二叉树采用顺序存储结构,如图(1)所示
e a
f d
g c j
h
i b
(1)
(1)画出二叉树表示;(2)写出先序遍历,中序遍历和后序遍历的结果;
(3)写出结点值c得双亲结点,其左、右孩子;
(4)画出把此二叉树还原成森林的图。
05选择题在线索化二叉树中,t所指结点没有左子树的充要条件是______。
A、t->left==NULL
B、t->ltag==1
C、t->ltag==1且t->left==NULL
D、以上都不对
1、设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为______。A.2h B.2h-1 C.2h+1 D.h+1
2、如图所示的4棵二叉树,____不是完全二叉树。
3、树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这个数对应的二叉树。结论正确的是_____。
A、树的先根遍历序列与其对应的二叉树的先序遍历序列相同
B、树的后根遍历序列与其对应的二叉树的后序遍历序列相同
C、树的先根遍历序列与其对应的二叉树的中序遍历序列相同
D、以上都不对
5、线索二叉树是一种______结构A、逻辑B、逻辑与存储C、物理D、线性
二、简答题
1、指出树和二叉树的三个主要差别。
2、假设二叉树采用顺序存储结构,如图所示。
(1)画出二叉树表示
(2)写出先序遍历,中序遍历,后序遍历的结果
(3)写出结点值c的双亲结点,其左、右孩子
(4)画出把此二叉树还原成森林的图
1.讨论树、森林和二叉树的关系,目的是为了()
A.借助二叉树上的运算方法去实现对树的一些运算
B.将树、森林按二叉树的存储方式进行存储
C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义
2.树最适合用来表示 ( )
A.有序数据元素 B.无序数据元素
C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据
3.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定
4.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F 对应的二叉树根结点的右子树上的结点个数是()。
A.M1 B.M1+M2 C.M3 D.M2+M3
5.利用二叉链表存储树,则根结点的右指针是()。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空
二填空题1.深度为k的完全二叉树至少有___ ____个结点,至多有___ ____个结点2.具有n个结点的二叉树中,一共有________个指针域,其中只有________个用来指向结点的左右孩子,其余的________个指针域为NULL。
3.树的主要遍历方法有________、________、________等三种。
4.二叉树的先序序列和中序序列相同的条件是___ ___。
5.一个无序序列可以通过构造一棵___ ___树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。
判断题 1. 一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。( ) 2.二叉树只能用二叉链表表示。()
3.用一维数组存储二叉树时,总是以前序遍历顺序存储结点。()
程序填空 1.以下程序是二叉链表树中序遍历的非递归算法,请填空使之完善。二叉树链表的结点类型的定义如下:
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)__ __; }/*栈顶元素出栈*/ }
2.二叉树存储结构同上题,以下程序为求二叉树深度的递归算法,请填空完善之。
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);}
07一、选择题1 .某二叉树的先序和后序遍历序列正好相反,则该二叉树一定是()。
A )空或只有一个结点
B )完全二叉树
C )二叉排序树
D )
2 .树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这棵树对应的二叉树,其中结论()是正确的。 A )树的先根遍历序列与其对应的二叉树的先序遍历序列相同
B )树的后根遍历序列与其对应的二义树的后序遍历序列相同
c )树的先根遍历序列与其对应的二叉树的中序遍历序列相同 D )以上都不对
3 .按照二叉树的定义,具有3 个结点的二叉树有()种。 A ) 3B ) 4C ) SD ) 6
4 .深度为
5 的二叉树至多有()个结点。 A ) 16B ) 32C ) 3lD ) 10
5.二叉树前序遍历和中序遍历序列如下:前序遍历序列:EFHIJK 中序遍历序列:HFIEJK 则该二叉树根结点的右子树的根为:( )。 A ) E B ) F C ) D ) H
6 .树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这棵树对应的二叉树,其中结论()是正确的。 A )树的先根遍历序列与其对应的二叉树的先序遍历序列相同
B )树的后根遍历序列与其对应的二义树的后序遍历序列相同
c )树的先根遍历序列与其对应的二叉树的中序遍历序列相同 D )以上都不对
二、填空题1、由10000个结点构成的二叉排序树在等概率查找的假设下查找成功时的平均查找长度的最大值可能达到______________________。
2、深度为k的完全二叉树至少有______个结点至多有____个结点若按自上而下从左到右次序给结点编号(从1开始)
三、算法设计题
(1)假设二叉树T采用如下定义的存储结构 typedef struct node{ DataType data; struct node *lchild,*rchild,*parent; }PBinTree;其中结点的lchild域和rchild 域已分别填有指向其左右孩子的指针而parent域中的值为空指针拟作为指向双亲结点的指针域。请编写一个递归算法将该存储结构中各结点的parent域的值修改成指向其双亲结点的指针
081.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( ) A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE
2. 在下述结论中,正确的是()
①只有一个结点的二叉树的度为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.条件不足,无法确定
3.二叉树的第I 层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -1 4.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是()A.CABDEFG B.ABCDEFG C.DACEFBG D.ADCFEG
5.下面的说法中正确的是().
(1)任何一棵二叉树的叶子结点在三种遍历中的相对次序不变;
(2)按二叉树定义,具有三个结点的二叉树共有6 种。
A.(1)(2) B.(1) C.(2) D.(1)、(2)都错
6.由3 个结点可以构造出多少种不同的有向树?()A.2 B.3 C.4 D.5
7.从下列有关树的叙述中,选出5 条正确的叙述()
A.二叉树中每个结点有两个子结点,而树无此限制,因此二叉树是树的特殊情况。
B.当K≥1 时高度为K 的二叉树至多有2k-1 个结点。
C.用树的前序周游和中序周游可以导出树的后序周游。
D.线索二叉树的优点是便于在中序下查找前驱结点和后继结点。
E.将一棵树转换成二叉树后,根结点没有左子树。
F.一棵含有N 个结点的完全二叉树,它的高度是?LOG2N?+1。
G.在二叉树中插入结点,该二叉树便不再是二叉树。
H.采用二叉树链表作树的存储结构,树的前序周游和其相应的二叉树的前序周游的结果是一样的。
I.哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
J.用一维数组存储二叉树时,总是以前序周游存储结点
2.判断题1.任何二叉树的后序线索树进行后序遍历时都必须用栈。
2.由一棵二叉树的前序序列和后序序列可以唯一确定它。
3.完全二叉树中,若一个结点没有左孩子,则它必是树叶。
4. 二叉树只能用二叉链表表示.
5. 一棵有n 个结点的二叉树,从上到下,从左到右用自然数依次给予编号,则编号为i 的结点的左儿子的编号为2i(2i< n),右儿子是2i+1(2i+1 三、填空题1.二叉树由_(1)__,__(2)_,_(3)__三个基本单元组成。 2.树在计算机内的表示方式有_(1)__,_(2)__,_(3)__。 3.在二叉树中,指针p 所指结点为叶子结点的条件是______。 4.中缀式a+b*3+4*(c-d)对应的前缀式为__(1)_,若a=1,b=2,c=3,d=4,则后缀式db/cc*a-b*+的运算结果为_(2)__。 5.二叉树中某一结点左子树的深度减去右子树的深度称为该结点的_____. 6.具有256 个结点的完全二叉树的深度为______。 7.已知一棵度为3 的树有2 个度为1 的结点,3 个度为2 的结点,4 个度为3 的结点,则该树有______个叶子结点。 8.深度为k 的完全二叉树至少有___(1)____个结点,至多有___(2)____个结点 9.下面的类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; 10.将二叉树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)___; 11.下面使用类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; 091.若二叉树的后序遍历序列为dabec,中序遍历序列为debac,则前序序列遍历为()。 A、acbed B、decab C、deabc D、cedba 2. 具有35个结点的完全二叉树的深度为()A、5 B、6 C、7 D、8 3. 在线索化二叉树中,t所指结点没有左子树的充足条件是() A、t-lchild==NULL B、t->ltag==1 C、t->ltag==1&&t->lchild==NULL D、以上都不对 4. 设n,m为一棵二叉树上的两个结点,在中序遍历时,n在m前的条件是() A、n在m右方 B、n是m祖先 C、n在m左方 D、n是m子孙 5. 线索二叉树是一种()结构A、逻辑B、逻辑和存储C、物理D、线性 1、由一棵二叉树后序序列和()可唯一确定这棵二叉树。 2、含有n个结点的二叉树用二叉链表表示时,有()个空链域。 3、有m个叶子结点的哈夫曼树有()个结点。 4、前序为a,b,c且后序c,b,a的二叉树共有()棵。 5、已知完全二叉树的第4层有6个结点,则其叶子结点数是()。 一棵完全二叉树有500个结点,请问该完全二叉树有多少个叶子结点?有多少个度为1的结点?有多少个度为2的结点?如果完全二叉树有501个结点,结果如何?请写出推导过程。 1.设二叉树中每个结点均用一个字母表示,若一个结点的左子树或右子树为空,用#表示, 现前序遍历二叉树,访问的结点序列为ABD##C#E##F##,写出中序和后序遍历二叉树时结点的访问序列。 10一、单项选择题 1.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定 2.二叉树的第I层上最多含有结点数为()A.2I B.2I-1-1 C.2I-1 D.2I -1 3.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。A.CBEFDA B.FEDCBA C.CBEDFA D.不定4.下面几个符号串编码集合中,不是前缀编码的是()。A.{0,10,110,1111} B.{11,10,001,101,0001} C.{00,010,0110,1000} D.{b,c,aa,ac,aba,abb,abc} 5. 树的基本遍历策略可分为先根遍历和后根遍历;二叉树的基本遍历策略可分为先序遍历、中序遍历和后序遍历。这里,我们把由树转化得到的二叉树叫做这棵数对应的二叉树。结论()是正确的。 A.树的先根遍历序列与其对应的二叉树的先序遍历序列相同 B.树的后根遍历序列与其对应的二叉树的后序遍历序列相同 C.树的先根遍历序列与其对应的二叉树的中序遍历序列相同 D.以上都不对 二、判断1. 二叉树中所有结点如果不存在非空左子树则不存在非空右子树。() 2. 用一维数组存储二叉树时,总是以前序遍历顺序存储结点。( ) 3. 二叉树中序线索化后,不存在空指针域。()