7-4 List Leaves (25 分)
这道题在逻辑上并不难,难在我们可能树不是很熟悉上。
我用了静态链表的方法构造树,用循环队列来用数组实现队列。
思路:
1、将数据读进来用,找到根节点。
2、递归找到所有的叶子节点。
3、用队列实现层次遍历,来找到树各层的元素。
4、比较叶子节点和层次遍历的结果得到最终的结果。
#include <stdio.h>
#include <stdlib.h>
#define Null -1
#define MAX 15
//树的结构
typedef struct Node *Tree;
struct Node{
int index;
int left,right;
};
//队列的结构
typedef struct node *Queue;
struct node{
int Data[MAX];
int front,rear;
};
//操作
int ReadData(Tree q); //读取数据
void FindLeaves(Tree q,int root); //找到叶子节点
void AddQ(Queue q,int number); //入队
int DeleteQ(Queue q); //出队
int IsEmpty(Queue q); //是不是为空
Queue CreateQ(); //创建队列
void middle(Tree q,Queue p,int root); //层次遍历
//全局变量
int count = 0;
int num[100] = {
0}; //储存叶子节点
int count_mid = 0;
int mid[100] = {
0}; //储存层次遍历结果
int main()
{
int flag = 1