[主观题]

阅读下列程序说明和C程序,把应填入其中(n)处的字句,写在对应栏内。

(程序说明)

已知某二叉树的前序遍历和中序遍历序列,可以得到该二叉树的结构。本程序实现了根据这两个遍历序列生成一棵链接表示的二叉树。

构造二叉树的算法要点是:由前序遍历序列,该序列的第一个元素是根结点元素。该元素将中序遍历序列分成左、右两部分,那些位于该元素之前的元素是它的左子树上的元素,位于该元素之后的元素是它的右子树上的元素。对于左、右子树,由它们的前序遍历序列的第一个元素可确定左、右子树的根结点,参照中序遍历序列又可进一步确定子树的左、右子树元素。如此递归地参照两个遍历序列,最终构造出二叉树。

两个遍历序列作为主函数main()的参数。为简单起见,程序假定两个遍历序列是相容的。主函数调用函数restore()建立二叉树。函数restore()以树(子树)的前序遍历和中序遍历两序列及序列长为参数,采用递归方法建立树(子树)。函数postorder()实现二叉树的后序遍历序列输出,用来验证函数restore()建立的二叉树。

(程序)

include(stdio.h>

include<stdlib.h>

define MAX 100

typedef struct node{

char data;

struet node * llink,*rlink;

}TNODE;

charpred[MAX],inod[MAX];

TNODE * restore (Char*,char*,int);

main(int argc,Char* *argv)

{

TNODE * root;

if(argc<3)exit(0);

strcpy(pred,argv[1]);

strcpy(inod,argv[2]);

root=restore(pred,inod,strlen(pred))postorder(root);

printf("/n/n");

}

TNODE * restore(Char * ppos,char * ipos,int n)

{ /*参数包括前序遍历序列数组和中序遍历数组*/

TNODE * ptr;

C.har * rpos;

int k;

if(n <=0)return NULL;

ptr= (TNODE *)malloc(sizeof(TNODE));

ptr→data=(1);

for (2) rpos=ipos;rpos <ipos+n;rpos++ )

if(*rpos== * ppos)break;

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);

prinft("%c",ptr→data);

}

参考答案与解析:

相关试题

阅读下列程序说明和C代码,把应填入其中n处的字句写在对应栏内。 (说明) 下面的

[主观题]阅读下列程序说明和C代码,把应填入其中n处的字句写在对应栏内。(说明)下面的程序能够计算不同图形的面积。程序中把每个图形的数据定义成结构类型,利用共同体类型描述2种图形的数据。程序根据输入参数代表的图形类型,求出图形的面积并输出。(程序)struct Circle{float x,y; /*圆心位置*/float r; /*圆半径*/};struct Rectangle{float width; /*矩形宽*/float length; /*矩形长*/};union shape{struct C

  • 查看答案
  • 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。(程序说明) 著名

    [试题]阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。(程序说明)著名的四色定理指出任何平面区域图均可用4种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。程序中用1~4表示4种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻:矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。(程序)incl

  • 查看答案
  • 阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。 (说明)下

    [试题]阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。(说明)下面的程序先构造Point类,再顺序构造Ball类。由于在类Ball中不能直接存取类Point中的xCoordinate及yCoordinate属性值,Ball中的toString方法调用Point类中的toString方法输出中心点的值。在MovingBall类的toString方法中,super.toString调用父类Ball的toString方法输出类Ball中声明的属性值。public class Point{p

  • 查看答案
  • 阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。(说明)St

    [试题]阅读下列Java程序和程序说明,将应填入(n)处的字句写在对应栏内。(说明)StringEditor类的功能是:已知一个字符串,返回将字符串中的非字母字符都删除后的字符串。public (1) {public static String removeNonLetters( (2) ){StringBuffer aBuffer=(3);char aCharacter;for(int i=0; i<original.length();i++){aCharacter=(4);if(Character.i

  • 查看答案
  • 阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。 (说明)

    [主观题]阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。(说明)程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。(程序)define N 10main(){void (1);int i,a[N];for(i=0;i<10,i++) /*输入*/scanf(“%d”,&a[i]);(2);for(i=0;i<N,i++) /*输出*/printf(“%3d”,a[i]);}void selectSon(int x[],int n){int

  • 查看答案
  • 阅读以下说明和C£«£«程序,将应填入(n)处的字句写在对应栏内。(说明) 字符

    [试题]阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。(说明)字符串在程序设计中扮演着重要角色。现需要设计字符串基类string,包含设置字 符串、返回字符串长度及内容等功能。另有一个具有编辑功能的串类edlt_string,派生于string,在其中设置一个光标,使其能支持在光标处的插入、删除操作。(程序)include <iostream.h>include <stdio.h>include <string.h>class string{int length;char *data;pu

  • 查看答案
  • 阅读以下说明和C£«£«程序,将应填入(n)处的字句写在对应栏内。[说明] 以下

    [试题]阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。[说明]以下程序的功能是统计学生成绩,包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前百分之七十的学生定为合格(PASS),而后百分之三十的学生定为不合格(FAIL)。例如,当输入4名学生的姓名和成绩“Alice 67 Mary 90 Tom 56 John 88”后,程序的执行结果如下:姓名 成绩 合格否Mary 90 PASSJohn 88 PASSA.lice 67 FAILTom 56 FAIL[C++程序]inclu

  • 查看答案
  • 阅读以下说明和C£«£«程序,将应填入(n)处的字句写在对应栏内。 (说明) 设

    [试题]阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。(说明)设计一个评选优秀教师和学生的程序,其类结构如图6所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。(程序)include<iostream.h>include<stdio.h>enum boolean {False,True}class base{protected:char name[8];public:void getname() {cout<<"姓名:" ;cin>>name; }void print

  • 查看答案
  • 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。 (说明) “背包

    [试题]阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。(说明)“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为S,设有N件物品,其重量分别为w1,w2,…,wn。希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于S。如下程序均能求得“背包问题”的一组解,其中程序1是“背包问题”的递归解法,而程序2是“背包问题”的非递归解法。(程序1)include<stdio.h>define N 7define S 15int w[N+1]={0,1,4

  • 查看答案
  • 阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。[说明] 函数Pr

    [试题]阅读下列程序说明和C代码,将应填入(n)处的字句写在对应栏内。[说明]函数Printprime(int UpBound)的功能是输出1到UpBound以内的全体素数。[函数2.1]void PrintPrime(int UpBound)printf("2," );for(i=3; i<UpBound; i+ =2) {int k = sqrt(i);for(j=3; j<= k;(1)) /*检查i是否有3到k以入的奇因数*/if((2)) break;fi((3)) printf("%d

  • 查看答案
  • 阅读下列程序说明和C程序,把应填入其中(n)处的字句,写在对应栏内。(程序说明)