//头文件
#ifndef _Four35_H
typedef struct queue *Queue;
typedef struct QueueNode *Position;
typedef struct TreeNode *Pos;
typedef struct TreeNode *Tree;
typedef Pos ElementType ;
Queue InitQueue();
int isEmpty(Queue Q);
ElementType Dequeue(Queue Q);
void Enqueue(ElementType x,Queue Q);
Tree makeRandomTree(int lower,int upper);
int RandInt(int i,int j);
void printTree(Tree T);
#endif
#include <stdio.h>
#include <stdlib.h>#include "four35.h"
struct TreeNode{
int element;
Tree Left;
Tree Right;
};
struct QueueNode{
ElementType element;
Position next;
};
struct queue{
Position front;
Position rear;
};
int RandInt(int i,int j)//生成一个i到j之间的值。
{
int temp;
temp=i+(1.0*rand()/RAND_MAX)*(j-i);
printf("....%d\n",temp);
return temp;
}
Tree makeRandomTree(int lower,int upper)//建立一个随机树
{
if(lower<=upper)
{
int num=RandInt(lower,upper);
Tree t;
t=(Tree)malloc(sizeof(struct TreeNode));
if(t==NULL)
{ printf("error");
return NULL;
}
t->element=num;
t->Left=makeRandomTree(lower,num-1);
t->Right=makeRandomTree(num+1,upper);
return t;
}
return NULL;
}
void printTree(Tree T)//前序遍历打印树
{
if(T!=NULL)
{
printf("%d",T->element);
printTree(T->Left);
printTree(T->Right);
}
printf("\n");
}
int isEmpty(Queue Q)
{
return Q->front==NULL;
}
Queue InitQueue()
{ Queue Q;
Q=(Queue)malloc(sizeof(struct queue));
Q->front=Q->rear=NULL;
return Q;
}
ElementType Dequeue(Queue Q)
{
ElementType temp;
Position p;
if(Q->front==NULL)
{
printf("空");
return NULL;
}
p=Q->front;
temp=Q->front->element;
Q->front=p->next;
if(Q->front==NULL)
{
Q->rear=NULL;
}
free(p);
return temp;
}
void Enqueue(ElementType x,Queue Q)
{
Position p;
p=(Position)malloc(sizeof(struct QueueNode));
if(p==NULL)
{
printf("error");
return;
}
p->element=x;
p->next=NULL;
if(Q->rear==NULL)
{
Q->front=Q->rear=p;
}
else
{
Q->rear->next=p;
Q->rear=p;
}
}
void PrintElement(ElementType p)
{
printf("%d\n",p->element);
}
void Level(Tree T)
{
Queue q;
Pos p=T;
q=InitQueue();//建立一个队列
if(T!=NULL)
Enqueue(p,q);//树根入列
while(!isEmpty(q))
{
p=Dequeue(q);//出列并获得出列元素
PrintElement(p);//打印出列指针指向的值
if(p->Left!=NULL)
Enqueue(p->Left,q);//左儿子入列
if(p->Right!=NULL)
Enqueue(p->Right,q);//右儿子入列
}
}
main()
{
Tree t;
t=makeRandomTree(1,10);
printTree(t);
Level(t);
}