1、1 绪论一、选择题:1、下列算法的时间复杂度是( )for(i=0;inext=P-next;P-next=SBP-next=S-next;S-next=P ;CP-next=P;P-next=S;DP-next=S;S-next=P;3、在已知头指针的单链表中,要在其尾部插入一新结点,其算法所需的时间复杂度为( )A(1) B(log 2n) CO (n) DO(n 2)解析:单就插入运算而言,算法时间复杂度为(1) ,但要将指针定位到链表末尾,指针移动的时间复杂度为 O( n) ;4、对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )A顺序表 B用头指针表示的单循环链表C
2、用尾指针表示的单循环链表 D单链表解析:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为 rear,则开始结点和终端结点的位置分别是 rear-next-next 和 rear, 查找时间都是 O(1)。若用头指针来表示该链表,则查找终端结点的时间为 O(n)。5、线性表是( ) A一个有限序列,可以为空 B一个有限序列,不能为空C一个无限序列,可以为空 D一个无限序列,不能为空6、在 n 个结点的双链表的某个结点前插入一个结点的时间复杂度是( )AO(n) BO(1) CO (log 2n) DO (n 2)7
3、、线性表采用链式存储时,结点的地址( )A必须是连续的 B必须是不连续的 C连续与否均可 D必须有相等的间隔8、在单链表中,增加头结点的目的是( )A使单链表至少有一结点 B标志表中首结点位置C方便运算的实现 D说明单链表是线性表的链式存储实现9、带头结点的单链表 head 为空的判定条件是( )Ahead = NULL; Bhead - next = NULL; Chead - next = head; Dhead ! = NULL ;10、在一个具有 n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度为( )A(1) B(n) C(n 2) D(log 2n)11、下列有关线性表
4、的叙述中,正确的是( )4A线性表中的元素之间是线性关系B线性表中至少有一个元素C线性表中任何一个元素有且仅有一个直接前趋D线性表中任何一个元素有且仅有一个直接后继12、在单链表中,存储每个结点需有两个域,一个是数据域,另一个是指针域,它指向该结点的( )A直接前趋 B直接后继 C开始结点 D终端结点13、将两个各有 n 个元素的有序表归并成一个有序表,其最少的比较次数是( ) 。An B.2n-1 C.2n D.n-114、链表不具有的特点是( ) 。A随机访问 B不必事先估计存储空间C插入删除时不需移动元素 D所需的空间与线性表成正比15、在一个单链表中,已知 q 所指结点是 p 所指结点
5、的直接前趋,若在 p,q 之间插入 s结点,则执行的操作是( ) 。As-next=p-next;p-next=s; Bq-next=s;s-next=p;Cp-next=s-next;s-next=p; Dp-next=s;s-next=q;16、链表具有的特点是( ) 。A可随机访问任一元素 B插入、删除需要移动元素C不必事先估计存储空间 D存储空间是静态分配的17、一个顺序表一旦说明,其中可用空间大小( )A已固定 B可以改变 C不能固定 D动态变化18、若某线性表中最常用的操作是取第 i 个元素和找第 i 个元素的前趋元素,则采用( )存储方式最节省时间。A 顺序表 B单链表 C双向链
6、表 D单循环链表19、两个指针 P 和 Q,分别指向单链表的两个元素,P 所指元素是 Q 所指元素的前驱的条件是( ) 。AP-next=Q BQ-next=PCP=Q DP-next=Q-next20、链表不具有的特点是( ) 。A可随机访问任一元素 B插入、删除不需要移动元素C不必事先估计存储空间 D所需空间与线性表长度成正比21、下面关于线性表的叙述中,错误的是( ) 。A线性表采用顺序存储,必须占用一片连续的存储单元B线性表采用顺序存储,便于进行插入和删除操作C线性表采用链接存储,不必占用一片连续的存储单元D线性表采用链接存储,便于进行插入和删除操作22、在 n 个结点的顺序表中,算法
7、的时间复杂度是 O(1)的操作是( ) 。A访问第 i 个结点(1in )和求第 i 个结点的直接前趋(2in)B在第 i 个结点后插入一个新结点( 1in)5C删除第 i 个结点(1in )D将 n 个结点从小到大排序23、在一个单链表中,若删除 p 指向结点的后继结点,则执行的操作为( ) 。Aq=p-next;p-next=p-next-next;free(q);Bp=p-next;q=p-next;p=q-next;free(q);Cq=p-next-next;p=p-next;free(q);Dp=p-next-next;q=p-next;free(q);二、 填空题:1、在双链表中
8、要删除已知结点*p,其时间复杂度为( ) 。2、在仅有尾指针 R 指示的单循环链表 R 中,在表尾插入一个结点 S 的语句序列是( ) 。3、在带头结点的双链表中,指针所指结点是开始结点的条件是( ) 。4、在具有 n 个结点的双链表中做插入、删除运算,平均时间复杂度为( ) 。5、在一个长度为 n 的顺序表中第 i 个元素(1 i n)之前插入一个元素时,需向后移动( )个元素。6、在双循环链表中,若要在指针 p 所指结点之前插入指针 s 所指的结点,则需执行下列语句:s-prior=p-prior;p-prior-next=s;( )和 p-prior=s;。7、已知指针 p 指向双向链表
9、中的一个结点(非首结点、非尾结点) ,则将结点 s 插入在p 结点的直接后继位置的语句是( )s-prior=p;s-next-prior=s;p-next=s;8、已知带表头结点的单链表 L,指针 p 指向 L 链表中的一个结点(非首结点、非尾结点),则删除结点 p 的直接后继结点的语句是( ) ;删除首结点的语句是( ) 。三、 判断题1、在有序的顺序表和有序的链表上,均可以使用折半查找法来提高查找速度。 ( )2、顺序存储的线性表可以随机存取。 ( )3、线性表采用顺序存储,必须占用一片连续的存储单元。 ( )四、 程序设计题数据结构的数据类型定义如下:顺序存储:typedef stru
10、ct int *base; int length; int listsize; sqlist;链式存储:6typedef struct LinkListint data; struct LinkList *next; Node,*LinkList;1、已知带头结点的单链表 head 中的结点是按整数值递增排序的,写一算法将值为 x 的结点插入到表 head 中,使 head 仍然有序。2、用尾插法建立带头结点的单链表。3、用头插法建立带头结点的单链表。4、对给定的单链表 L,编写一个删除 L 中值为 x 的结点的直接前趋结点算法。5、用顺序存储结构实现线性表的就地逆置算法,即将(a1,a2,
11、ai,an)逆置为(an,ai,a2,a1);6、用链式存储结构实现线性表的就地逆置算法,即将(a1,a2, ai,an)逆置为(an,ai,a2,a1);7、使用顺序存储结构分别实现 A=AB 和 A=AB 运算;参考答案(线性表)一、选择题1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23B A B C A B C C B B A B B A B C B A A A B A A二、填空题1、在双链表中要删除已知结点*p,其时间复杂度为(O(1)) 。2、在仅有尾指针 R 指示的单循环链表 R 中,在表尾插入一个结点 S 的
12、语句序列是(P=R; while(P-next!=NULL) P=P-next; P-next=S; S-next=NULL;) 。3、在带头结点的双链表中,指针所指结点是开始结点的条件是(P= =L) 。4、在具有 n 个结点的双链表中做插入、删除运算,平均时间复杂度为(O(1)) 。5、在一个长度为 n 的顺序表中第 i 个元素(1 i n)之前插入一个元素时,需向后移动(n-i+1)个元素。6、在双循环链表中,若要在指针 p 所指结点之前插入指针 s 所指的结点,则需执行下列语句:s-prior=p-prior;p-prior-next=s;( s-next=p; )和 p-prior=
13、s;。7、已知指针 p 指向双向链表中的一个结点(非首结点、非尾结点) ,则将结点 s 插入在p 结点的直接后继位置的语句是(p-next=s;)s-prior=p;s-next-prior=s;p-next=s;78、已知带表头结点的单链表 L,指针 p 指向 L 链表中的一个结点(非首结点、非尾结点),则删除结点 p 的直接后继结点的语句是(q=p-next; p-next=q-next; free(q);) ;删除首结点的语句是(q=L-next; L=L-next; free(q);) 。三、判断题1、在有序的顺序表和有序的链表上,均可以使用折半查找法来提高查找速度。 ()2、顺序存储
14、的线性表可以随机存取。 ()3、线性表采用顺序存储,必须占用一片连续的存储单元。 ()四、程序设计题1、已知带头结点的单链表 head 中的结点是按整数值递增排序的,写一算法将值为 x 的结点插入到表 head 中,使 head 仍然有序。P=head-next;While(p-next!=NULL/指针定位p-next=x;x-next=p-next;2、用尾插入法建立带头结点的单链表。请参考教材“数据结构-清华大学严尉敏著评 p29-p30”;3、用头插入法建立带头结点的单链表。请参考教材“数据结构-清华大学严尉敏著评 p29-p30”;4、对给定的单链表 L,编写一个删除 L 中值为 x
15、 的结点的直接前趋结点算法。/算法思路:先判断 L 中是否存在值为 x 的结点,若不存在,返回错误(-1) ;若存在,用一指针 p 定位到值为 x 的第一结点,用另一个指针 q 定位到值为 x 的第一结点的前驱结点,然后实施删除操作;重点语句为:p=L-next;/p 指向第一个结点whili(p-data!=xif(p= =NULL) ruturn error;/不存在else p=L-next;while(p-next-next-data!=x) p=p-next;q=p-next;p-next=p-next-next;free(q);5、用顺序存储结构实现线性表的就地逆置算法,即将(a1
16、,a2, ai,an)逆置为8(an,ai,a2,a1);重点语句:for(i=0;irear=(qrear+1)%maxsize;20、栈和队列都是( ) 。A限制存取点的线性结构 B限制存取点的非线性结构C顺序存储的线性结构 D链式存储的线性结构21、实现递归调用属于( )的应用。A队列 B栈 C 数组 D树二、 填空题: 1、循环队列用数组 datam存放其元素值,已知其头、尾指针分别是 front 和 rear,则当前队列中元素的个数是( ) 。2、栈顶的位置是随着( )操作而变化的。3、假设以 S 和 X 分别表示进栈和退栈操作,则对输入序列 a,b,c,d,e 进行一系列栈操作 S
17、SXSXSSXXX 之后,得到的输出序列为( ) 。4、队列的队尾位置随着( )而变化。5、在( )的情况下,链队列的出队操作需要修改尾指针。6、从栈顶指针为 top 的链栈中删除一个结点,并将被删除的结点的值保存在 x 中,其操作步骤为( ) ;top=top-next;。7、用数组 Am来存放循环队列 q 的元素,且它的头、尾指针分别为 front 和 rear,队列满足条件(q.rear+1)%m=q.front,则队列中当前的元素个数为( ) 。8、顺序栈 s 存储在数组 s-datamax中,对 s 进行出栈操作,执行的语句序列是( ) 。9、以下运算实现在循环队列中的初始化操作vo
18、id initqueue(seqqueue *q)q-front=0;( );三、 判断题:1、循环队列中无上溢现象。 ( )122、循环队列只有下溢,没有上溢。 ( )3、对顺序栈而言,在栈满状态,如果此时再作进栈运算,则会发生“下溢” 。 ( )4、顺序队列和循环队列的队满和队空的条件是一样的。 ( )5、为解决队列“假满”问题,可以采用循环数组实现队列存储。 ( )6、队列是后进先出表。 ( )7、栈是后进先出表。 ( )四、 应用题:1、 设有一个栈,元素进栈的次序为 A,B,C,D,E,写出下列出栈序列的操作序列。(1)CBADE(2)ACBED,其中 I 为进栈操作,O 为出栈操作
19、。2、如果编号为 1、2、3 的三辆列车进入一个栈式结构的站台,那么可能得到的三辆列车出站序列有哪些?不可能出现的序列是什么?五、 程序设计题:1、写出循环队列入队操作的函数。参考答案(栈和队列)一、选择题1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21A A B D B C D B C B D C C B A B B B C A B二、填空题1、循环队列用数组 datam存放其元素值,已知其头、尾指针分别是 front 和 rear,则当前队列中元素的个数是((rear-front+maxsize)%maxsize ) 。2、栈顶的位
20、置是随着(入栈和出栈)操作而变化的。3、假设以 S 和 X 分别表示进栈和退栈操作,则对输入序列 a,b,c,d,e 进行一系列栈13操作 SSXSXSSXXX 之后,得到的输出序列为(bceda) 。4、队列的队尾位置随着(入队列操作变化)而变化。5、在(链队列为空)的情况下,链队列的出队操作需要修改尾指针。分析:Q.rear=h;6、从栈顶指针为 top 的链栈中删除一个结点,并将被删除的结点的值保存在 x 中,其操作步骤为(x=top-data) 。7、用数组 Am来存放循环队列 q 的元素,且它的头、尾指针分别为 front 和 rear,队列满足条件(q.rear+1)%m=q.fr
21、ont,则队列中当前的元素个数为(0) 。8、顺序栈 s 存储在数组 s-datamax中,对 s 进行出栈操作,执行的语句序列是(stop-) 。9、以下运算实现在循环队列中的初始化操作void initqueue(seqqueue *q)q-front=0;( qbase=(qelemtype *)malloc(maxsize*sizeof(qelemtype); qrear=0;);三、判断题1、循环队列中无上溢现象。 ()2、循环队列只有下溢,没有上溢。 ()3、对顺序栈而言,在栈满状态,如果此时再作进栈运算,则会发生“下溢” 。 ()4、顺序队列和循环队列的队满和队空的条件是一样的。
22、 ()5、为解决队列“假满”问题,可以采用循环队列实现队列存储。 ()6、队列是后进先出的线性表。 ()7、栈是后进先出表。 ()四、应用题1、设有一个栈,元素进栈的次序为 A,B,C,D,E,写出下列出栈序列的操作序列。(1)CBADE(2)ACBED,其中 I 为进栈操作,O 为出栈操作。参考答案:(1)IIIOOOIOIO(2)IOIIOOIIOO2、如果编号为 1、2、3 的三辆列车顺序进入一个栈式结构的站台,那么可能得到的三辆列车出站序列有哪些?不可能出现的序列是什么?参考答案:可能得到的三辆列车出站序列有 1,2,3; 1,3,2;2,1,3;2,1,3;2,3,1;其他 3 个数
23、字的另外 1 个排列不可能出现,即3,1,2。五、程序设计题1、写出循环队列入队操作的函数。请参考清华大学出版社严蔚敏编著的数据结构 C 语言版p65。4 串和数组(含参考答案)14一、单选题 1下列那些为空串( ) A)S=“ ” B)S=“” C)S=“” D)S=“” 答案:B 2S1=“ABCD” ,S2=“CD”则 S2 在 S3 中的位置是( ) A)1 B)2 C)3 D)4 答案:C 3假设 S=“abcaabcaaabca”,T= “bca”,Index (S,T,3) 的结果是( ) A)2 B)6 C ) 11 D)0 答案:B 4在串中,对于 SubString( /*
24、说明 st,退出比较*/ return tag; else tag=-1; /*说明 sm) tag=1; /*若串 t 只和串 s 的前 m 个字符相等则 st*/ else if(n1 )的父结点是( )A2i B不存在 C2i+1 D i/2 2、有 m 个叶结点的哈夫曼树所具有的结点数为( )Am Bm+1 C2m D2m - 13、下列陈述中正确的( )A二叉树是度为 2 的有序树B二叉树中结点只有一个孩子时无左右之分C二叉树中必有度为 2 的结点D二叉树中最多只有两棵子树,并且有左右之分4、以二叉链表作为二叉树的存储结构,在具有个结点的二叉链表中(n0),空链域的个数为( )A2n
25、 - 1 Bn - 1 Cn + 1 D2n + 15、将一棵有 100 个结点的完全二叉树从上到下,从左到右依次对结点进行编号,根结点的编号为 1,则编号为 49 的结点的左孩子编号为( )A99 B98 C50 D486、在一棵具有五层的满二叉树中,结点总数为( )A31 B32 C33 D16217、在一棵二叉树中,第 5 层上的结点数最多为( )A8 B15 C16 D328、由二叉树的( )遍历,可以惟一确定一棵二叉树A前序和后序 B前序和中序 C后序 D中序9、具有 35 个结点的完全二叉树的深度为( ) 。A.5 B.6C.7 D.810、已知一棵二叉树的先序遍历序列为 EFHI
26、GJK,中序遍历序列为 HFIEJGK,则该二叉树根的右子树的根是( ) 。AE B. F C. G D. J11、由 4 个结点构造出的不同的二叉树个数共有( ) 。 A8 B. 10 C12 D14解析: (解释:最多有 4 层,最少有 3 层。若有 4 层,从第二层开始,1412)(C均有两个位置可选;若有 3 层,第 3 层上有 4 个位置可选)12、在完全二叉树中,如果一个结点是叶子结点,则它没有( ) 。A.左孩子结点 B. 右孩子结点C.左、右孩子结点 D.左、右孩子结点和兄弟结点13、深度为 6 的二叉树最多有( )个结点。A64 B63 C32 D3114、二叉树使用二叉链表
27、存储,若 p 指针指向二叉树的一个结点,当 p-lchild=NULL 时,则( ) 。A p 结点左孩子为空 Bp 结点有右孩子C p 结点右孩子为空 Dp 结点有左孩子15、在具有 n 个结点的完全二叉树中,若结点 i 有左孩子,则结点 i 的左孩子编号为( ) 。A2i B不存在 C2i+1 D2i-116、将含 100 个结点的完全二叉树从根这一层开始,按从上到下从左到右依次对结点编号,根结点的编号为。编号为 50 的结点 X 的双亲的编号为( ) 。A25 B48 C100 D无法确定2217、三个结点可以构成( )种不同形状的二叉树。A 2 C3 D518、若由树转化得到的二叉树是
28、非空的二叉树,则二叉树形状是( ) 。A根结点无右子树的二叉树 B根结点无左子树的二叉树C根结点可能有左子树和右子树 D各结点只有一个孩子的二叉树19、哈夫曼树是访问叶结点的带权路径长度( )的二叉树。A最短 B最长 C可变 D不定20、某二叉树的前序和后序序列正好相反,则该二叉树一定是( )的二叉树。A空或只有一个结点 B高度等于其结点数C任一结点无左孩子 D任一结点无右孩子二、 填空题:1、12 个结点的完全二叉树的叶结点有(5)个。2、在任何一棵二叉树中,度为的结点 n0 和度为的结点 n2 之间的关系是(n0=n2+1。3、已知完全二叉树的第 4 层有 4 个结点,则其叶子结点数是(1
29、1) 。4、10 个结点的完全二叉树的叶结点有(3)个。5、深度为 6 的二叉树最多有(63)个结点。 6、一个二叉树中,度为 2 的结点有 3 个,则叶结点有(4)个。7、若二叉树的一个叶子是某子树的中根遍历序列中的第一个结点,则它必是该子树的后根遍历序列中的(第一)个结点。8、下图为某树的静态双亲表示,则结点 D、E 的双亲结点分别为(B)和(C) 。01 23 4 9、具有 m 个叶结点的哈夫曼树共有(2m-1)个结点。 10、二叉树通常有(顺序)存储结构和(链式)存储结构两种。11、二叉树在二叉链表表示方式下,p 指向二叉树的根结点,经运算 s=p;while(s-rchild) s=
30、s-rchild 后,s 指针指向(根或最右)结点。三、 判断题:1、完全二叉树中,若一个结点没有左孩子,则它必须是叶子。 (TRUE)2、由二叉树结点的先根序列和后根序列可以唯一地确定一棵二叉树。 (FALSE)A -1B 0C 0D 1E 2233、一般在哈夫曼树中,权值越大的叶子离根结点越近。 (TRUE)4、二叉树中任何一个结点的度都是 2。 (FALSE)5、一棵哈夫曼树中不存在度为 1 的结点。 (TRUE)解析:n=n0+n1+n2; 2n0-1=n; n0=n2+1;可推出不存在 n1;6、若一个二叉树的叶结点是先根遍历序列的最后一个结点,则它必是中根遍历的序列中的最后一个结点
31、。 (FALSE)7、中序遍历二叉排序树的结点不能得到排好序的结点序列。 (FALSE)8、完全二叉树一定是满二叉树。 (FALSE)9、由二叉树的前序和中序遍历序列可以推导出此二叉树的后序遍历序列。 (TRUE)10、满二叉树一定是完全二叉树。 (TRUE)11、完全二叉树可采用顺序存储结构实现存储,非完全二叉树则不能。 (FALSE)四、 应用题:1、对给定的一组权值 W=5,2,9,11,8,3,7 ,试构造相应的哈夫曼树,并计算它的带权路径长度。参考答案:24带权路径长度=11*1+9*2+8*3+7*3+5*3+3*4+2*42、已知一棵二叉树的前序序列和中序序列分别如下,请画出该二
32、叉树。前序序列:A B D G J K L H C E I F中序序列:B G J L K D H A E I C F解析:前序序列:A B D G J K L H C E I F中序序列:B G J L K D H A E I C F找到根后,可确定左子树结点和右子树结点,然后递归进行即可;3、试找出分别满足下列条件的所有二叉树。(1)前序序列和中序序列相同;(2)中序序列和后序序列相同;(3)前序序列和后序序列相同。解答:只有空树或只有根结点的二叉树,同时满足上述三个条件;4、设有一组结点,其权值 W=1,4,9,16,25,36,49,64,81,100 ,画出由这些结点所构成的哈夫曼树
33、,并计算带权路径长度。解析:参考第一题;255、画出下图所示森林经转换后所对应的二叉树。参考答案:6、已知一棵二叉树的先根遍历序列和中根遍历序列分别是 ABDGHE 及 GDHBEA,画出这棵二叉树。参考答案:8、写出下图所示二叉树的先根遍历、中根遍历、后根遍历的结点序列,并将其转换为森 A B C D E F J G H I26林。参考答案:五、 程序设计题:1、写出二叉树的建立及前序遍历递归算法。参考答案:#include “stdio.h“#include “string.h“#include “stdlib.h“#include “windows.h“typedef struct BT
34、Nodechar data;struct BTNode *Lchild,*Rchild;BTNode,*BTree;/*BTree is address of root*/BTree Pre_Create_BT(BTree BT)/返回指针的函数 char ch;ch=getchar();AB ECDF GHI27if(ch=#) return NULL;/*make an empty tree!*/elseBT=(BTNode *)malloc(sizeof(BTNode);/*get a space of node*/BT-data=ch;BT-Lchild=Pre_Create_BT(B
35、T );/*make left tree*/BT-Rchild=Pre_Create_BT(BT );/*make right tree*/return BT;void Visit(BTree BT)if(BT) printf(“%c“,BT-data);void Visit(BTree BT)if(BT) printf(“%c“,BT-data);void PreOrder(BTree BT)if(BT)Visit(BT);PreOrder(BT-Lchild);PreOrder(BT-Rchild);2、写出二叉树的建立及后序遍历递归算法。参考答案:#include “stdio.h“#i
36、nclude “string.h“#include “stdlib.h“#include “windows.h“typedef struct BTNode28char data;struct BTNode *Lchild,*Rchild;BTNode,*BTree;/*BTree is address of root*/BTree Pre_Create_BT(BTree BT)/返回指针的函数 char ch;ch=getchar();if(ch=#) return NULL;/*make an empty tree!*/elseBT=(BTNode *)malloc(sizeof(BTNod
37、e);/*get a space of node*/BT-data=ch;BT-Lchild=Pre_Create_BT(BT );/*make left tree*/BT-Rchild=Pre_Create_BT(BT );/*make right tree*/return BT;void Visit(BTree BT)if(BT) printf(“%c“,BT-data);void Visit(BTree BT)if(BT) printf(“%c“,BT-data);void PostOrder(BTree BT)if(BT)PostOrder(BT-Lchild);PostOrder(B
38、T-Rchild);Visit(BT);293、写出二叉树的建立及中序遍历递归算法。参考答案:#include “stdio.h“#include “string.h“#include “stdlib.h“#include “windows.h“typedef struct BTNodechar data;struct BTNode *Lchild,*Rchild;BTNode,*BTree;/*BTree is address of root*/BTree Pre_Create_BT(BTree BT)/返回指针的函数 char ch;ch=getchar();if(ch=#) return
39、 NULL;/*make an empty tree!*/elseBT=(BTNode *)malloc(sizeof(BTNode);/*get a space of node*/BT-data=ch;BT-Lchild=Pre_Create_BT(BT );/*make left tree*/BT-Rchild=Pre_Create_BT(BT );/*make right tree*/return BT;void Visit(BTree BT)if(BT) printf(“%c“,BT-data);void InOrder(BTree BT)if(BT)InOrder(BT-Lchild);Visit(BT);