A、2
B、-8
C、7
D、9
【程序说明】
已知某二叉树的前序遍历和中序遍历序列,可以得到该二叉树的结构。本程序实现了根据这两个遍历序列生成一棵链接表示的二叉树。
构造二叉树的算法要点是:由前序遍历序列,该序列的第一个元素是根结点元素。该元素将中序遍历序列分成左、右两部分,那些位于该元素之前的元素是它的左子树上的元素,位于该元素之后的元素是它的右子树上的元素。对于左、右子树,由它们的前序遍历序列的第一个元素可确定左、右子树的根结点,参照中序遍历序列又可进一步确定子树的左、右子树元素。如此递归地参照两个遍历序列,最终构造出二叉树。
两个遍历序列作为主函数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;
Char * 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);
}
A、a b c d e f g
B、a b c d f g e
C、a d b g c f e
D、a d c f b g e
【说明】
用创建Thread类的子类的方法实现多线程,判断一个数是否是素数。如果是,打印“是素数”,如果不是,则打印“不是素数”;如果没有参数输入,显示“请输入一个命令行参数”。
【Java程序】
import java.io.* ;
public class TestThread{ //Java Application主类
public static void main(Sting args[ ]){
if (args length<l) { //要求用户输入一个命令行,否则程序不能进行下去
system.out.println("请输入一个命令行参数");
system.exit(0) ;
} //创建用户Thread子类的对象实例,使其处于NewBorn状态
primeThread getPrimes = new primeThread (Integer.parseInt(args[0]));
getPrimes.start () ; //启动用户线程,使其处于Runnable状态
while(getPrimes.isAlive()&& getPrimes.ReadyToGoOn() ) {
system.out.println("Counting the prime number..\n"); //说明主线程在运行
try {
Thread. sleep (500); //使主线程挂起指定毫秒数,以便用户线程取得控制权,
//sleep是static的类方法
}
Catch(InterruptedException e) { //sleep方法可能引起的异常,必须加以处理
return ;
}
} //while循环结束
System.out.println ("按任意键继续……") ; //保留屏幕,以便观察
try {
(1);
}
Catch(IOException e) { }
} //main方法结束
}
class primeThread extends Thread {
//创建用户自己的Thread子类run()中实现程序子线程操作
boolean m_bContinue=true; //标志本线程是继续
int m_nCircleNum ; /循环的上限
prime Thread(int Num){ //构造函数
m_nCircleNum =Nam;
}
boolean ReadyToGoOn () { //判断本线程是否继续执行
return ((2) );
}
public void run () {
//继承并重载父类Thread的run ()方法,在该线程被启动时自动执行
int number =3;
boolean flag=true;
while (true) { //无限循环
for((3); i++) //检查number是否为素数
if(number %i==0)
(4);
system, out. println (flag);
if (flag) //打印该数是否为素数的信息
system,out.print in (number+ "是素数") ;
else
sys rem.out.print In (number+ "是素数") ;
number++ ; &nb
为了保护您的账号安全,请在“简答题”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!