PTA List Leaves

PTA List Leaves
基本建树加队列的广度优先搜索
层序遍历

在这里插入代码片
```#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//using namespace std;

#define MAXSIZE 1000010
int queue[20];//建队列
int first=0;//队列头子
int last=0;
int m;
int flag=0;//输出的时候判断是否输出空格 
struct node
{
    int l;
    int r;    
} node[MAXSIZE];
void push(int x){
	queue[last]=x;
	last++;
	return;
}
void pop(){
	first++;
	return ;
}


int List[MAXSIZE];

int main()
{
	int n;
	char c;
	scanf("%d%c",&n);
	char s[10];
	int a[20],i;
	memset(a,-1,sizeof(a));
	for( i=0;i<n;i++){
		gets(s);
		//printf("%d\n",s[0]);
		if(s[0]>='0' && s[0]<='9'){
			node[i].l=s[0]-48;
			a[s[0]-48]=i;
		}
		else node[i].l=-1;
		if(s[2]>='0' && s[2]<='9'){
			node[i].r=s[2]-48;
			a[s[2]-48]=i;
		}
		else node[i].r=-1;
	
	}
	if(n==1){
		printf("0");
	}
	else{
	
		for( i=0;i<n;i++){
			if(a[i]==-1)break;
		}
		m=i;
		//printf("%d\n",m);
		//if()
	
//	printf("%d\n",node[m].l);
	push(m);
	for(i=0;i<n;){
		if(node[m].l!=-1){
			push(node[m].l);
		}
		if(node[m].r!=-1){
			push(node[m].r);
		}
		if(node[m].l!=-1 || node[m].r!=-1){
			pop();
			m=queue[first];
			i++;
		}
		else {
		//	int flag=0;
			if(flag){
				printf(" %d",m);
				pop();
				m=queue[first];
				i++;
			}
			else{
				printf("%d",m);
				pop();
				m=queue[first];
				i++;
				flag=1;
			}
		}
	}
}
    return 0;
}

发布了13 篇原创文章 · 获赞 1 · 访问量 145

猜你喜欢

转载自blog.csdn.net/safafs/article/details/105109949
今日推荐