顺序输入
dfs
纯c写的。没有指针,不喜欢指针。
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
struct tree{
int val;
int left;
int right;
};
int min(int a,int b){
if(a<b) return a;
else return b;
}
tree t[1000];
int n;
int num=0;
int tmp;
int minn = 1000;
int ans[1000];
void dfs(int root,int* ans,int find){
if(t[root].val == -1 ) return ;
ans[tmp++] = t[root].val;
if(t[t[root].left].val == -1 && t[t[root].right].val == -1) {
if(t[root].val == minn){
find = 1;
for(int i=0;i<tmp;i++) printf("ans%d ",ans[i]);
printf("\n");
return ;
}
}
if(t[t[root].left].val>0){
dfs(t[root].left,ans,find);
tmp--;
}
if(t[t[root].right].val>0){
dfs(t[root].right,ans,find);
tmp--;
}
return ;
}
int main(){
for(int i=0;i<1000;i++){
t[i].val = -1;
}
scanf("%d",&n);
while(n!=0){
t[++num].val = n;
scanf("%d",&n);
}
t[++num].val = -1;
for(int i=1;i<num;i++){
//printf("here");
if(t[i].val == -1) continue;
if(t[i*2].val==-1 && t[i*2+1].val==-1)
minn = min(t[i].val,minn);
if(t[i*2].val!=-1){
t[i].left = i*2;
}
if(t[i*2+1].val!=-1){
t[i].right = i*2+1;
}
printf("%d %d %d\n",t[i].val,t[i*2].val,t[i*2+1].val);
}
printf("minn%d\n",minn);
dfs(1,ans,0);
}