author:chenmingdong
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef struct NODE{
int val;
struct NODE *left;
struct NODE *right;
NODE(int val):val(val),left(NULL),right(NULL){};
}Node,*Tree;
//建立的是排序 二叉树 所以不允许出现相同的数
void create(Tree &p,int val)
{
if(p==NULL)
p = new Node(val);
else
{
if(val < p->val) //当前值 小于 父 的值
create(p->left,val);
if(val > p->val)//当前值 大于 父
create(p->right,val);
}
}
/* 下面这个用 指针
void create(Tree *p,int val)
{
if(*p==NULL)
*p = new Node(val);
else
{
if(val < (*p)->val) //当前值 小于 父 的值
create(&(*p)->left,val);
else if(val > (*p)->val)
create(&(*p)->right,val);
else
printf("有重复的数了%d\n",val);
}
}
*/
void visit(Tree t)
{
if(t->val != NULL)
printf("%-5d",t->val);
}
void preOrder(Tree p)
{
if(p != NULL)
{
// visit(p); //不用这个 0 会被认为是 NULL
printf("%-5d",p->val);
preOrder(p->left);
preOrder(p->right);
}
}
void inOrder(Tree p)
{
if(p != NULL)
{
preOrder(p->left);
printf("%-5d",p->val);
preOrder(p->right);
}
}
void postOrder(Tree p)
{
if(p != NULL)
{
preOrder(p->left);
preOrder(p->right);
printf("%-5d",p->val);
}
}
int main()
{
int a[20];
Tree root;
srand(time(NULL));
for(int i=0;i<10;i++){
a[i] = rand()%100;
printf("%-5d",a[i]);
}
for(int i=0;i<10;i++)
create(root,a[i]);
puts("\n\n先序排序法");
preOrder(root);
puts("\n中序排序法");
inOrder(root);
puts("\n后序排序法");
postOrder(root);
return 0;
}