#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node *lchild;
struct Node *rchild;
}Node;
int Insert(Node *&bt,int key);
void Create(Node *&bt,int key[],int n);
void First_printTree(Node *p);
void Mid_printTree(Node *p);
void Last_printTree(Node *p);
/*建立一棵排序二叉树*/
int main(){
Node *p=NULL,*q=NULL,*star=NULL;
int data[100],n;
int i;
printf("输入节点个数:");
scanf("%d",&n);
getchar();
printf("输入节点:");
for(i=0;i<n;i++)
scanf("%d",&data[i]);
Create(p,data,n);
Last_printTree(p);
First_printTree(p);
Mid_printTree(p);
return 0;
}
void Create(Node *&bt,int key[],int n)
{
int i;
bt=NULL;
for(i=0;i<n;i++)
Insert(bt,key[i]);
}
int Insert(Node *&bt,int key)
{
if(bt==NULL)
{
bt=(Node*)malloc(sizeof(Node));
bt->lchild=bt->rchild=NULL;
bt->data=key;
return 1;
}
else
{
if(key==bt->data)
return 0;
else if(key<bt->data)
return Insert(bt->lchild,key);
else
return Insert(bt->rchild,key);
}
}
void First_printTree(Node *p) //先序
{
if(p) //树不空
{
printf("%d ",p->data);
First_printTree(p->lchild);
First_printTree(p->rchild);
}
}
void Mid_printTree(Node *p) //中序
{
if(p) //树不空
{
Mid_printTree(p->lchild);
printf("%d ",p->data);
Mid_printTree(p->rchild);
}
}
void Last_printTree(Node *p) //后序
{
if(p) //树不空
{
Last_printTree(p->lchild);
Last_printTree(p->rchild);
printf("%d ",p->data);
}
}