簡單的建立樹,遍歷 數據也很水1A的題
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int time = 1, n;
int tree[1000];
int flag;
void deal( int i )
{
if( flag == -1 )
return ;
if( i >= pow(2,n)-1 )
{
printf( "%d", tree[i] );
flag = -1;
return ;
}
if( tree[i] == 1 )
{
deal( 2*i+2 );
}
else
{
deal( 2*i+1 );
}
};
int main()
{
char input[100], input1[1000], input2[1000];
int leaf[1000];
int x[1000], t, start;
int abs[1000];
while( scanf( "%d\n", &n ) && n )
{
printf( "S-Tree #%d:\n", time++ );
fgets( input, 1000, stdin );
for( int i = 0, a = 0; i < strlen(input); i++ )
{
if( input[i] == 'x' )
x[a++] = atoi(&input[i+1]);
}
fgets( input1, 1000, stdin );
for( int i = 0; i < pow(2,n); i++ )
leaf[i] = input1[i] - '0';
scanf( "%d\n", &t );
for( int i = 0; i < t; i++ )
{
fgets( input2, 1000, stdin );
for( int t = 0; t < n; t++ )
abs[t] = input2[t]-'0';
start = 0;
for( int k = 0; k < n; k++ )
for( int ta = 1; ta <= pow(2,k); ta++ )
tree[start++] = abs[x[k]-1];
for( int tb = 0; tb < pow(2,n); tb++ )
tree[start++] = leaf[tb];
flag = 1;
deal(0);
}
printf( "\n\n" );
}
return 0;
}