03-树2-List Leaves-编程题

03-树2-List Leaves-编程题

解题代码

#include<stdio.h>
#include<stdlib.h>
typedef struct node lea;
struct node {
	int left;
	int right;
};
typedef struct queue* que;
que Newque(void);
void List(lea le[], int r, que qu);
struct queue {
	int* data;
	int rear;
	int front;
};
int Readlea(lea le[]);
int main()
{
	lea le[10];
	int r = Readlea(le);
	que qu = Newque();
	List(le, r, qu);
	return 0;
}
int Readlea(lea le[]) {
	int N,  i, check[10] = { 0 };
	char temp, tl, tr;
	scanf("%d", &N);
	if (N) {
		for (i = 0; i < N; i++) {
			temp = getchar();
			scanf("%c %c", &tl, &tr);
			if (tl != '-') {
				le[i].left = tl - '0';
				check[le[i].left] = 1;
			}
			else le[i].left = -1;
			if (tr != '-') {
				le[i].right = tr - '0';
				check[le[i].right] = 1;
			}
			else le[i].right = -1;
		}
		for (i = 0; i < N; i++) {
			if (!check[i]) break;
		}
		return i;
	}
	else return -1;
}
que Newque(void) {
	que new = (que)malloc(sizeof(struct queue));
	new->data = (int *)malloc(10 * sizeof(int));
	new->front = -1;
	new->rear = -1;
	return new;
}
void List(lea le[], int r, que qu){
	if (r == -1) return;
	int flag = 1, i;
	qu->data[++qu->rear] = r;
	while (qu->front!=qu->rear) {
		r = qu->data[qu->front+1];
		if (le[r].left != -1 || le[r].right != -1)
		{
			if (le[r].left != -1) qu->data[++qu->rear]=le[r].left;
			if (le[r].right != -1) qu->data[++qu->rear] = le[r].right;
			qu->front++;
		}
		else {
			if (flag) flag = 0;
			else printf(" ");
			printf("%d", r);
			qu->front++;
		}
	}
}

测试结果

在这里插入图片描述

问题整理

1.good
发布了47 篇原创文章 · 获赞 2 · 访问量 1330

猜你喜欢

转载自blog.csdn.net/Aruasg/article/details/105269277
今日推荐