树的练习题

顺序输入

dfs

原题链接数组二叉树_牛客博客 (nowcoder.net)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值