题目分析:二叉排序树的建立,插入,前序遍历,中序遍历,后序遍历
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
struct node
{
int data;
struct node *l,*r;
}*root;
void InsertBST(node *rt,int data)
{
if(rt==NULL)
{
rt=(node *)malloc(sizeof(node));
if(root==NULL)
root=rt;///二叉排序树的根节点
rt->data=data;
rt->l=rt->r=NULL;
}
else
{
if(data==rt->data)
return ;
else if(data< rt->data)
{
if(rt->l==NULL)
{
node *temp=(node *)malloc(sizeof(node));
temp->data=data;
temp->l=temp->r=NULL;
rt->l=temp;
}
else
InsertBST(rt->l,data);
}
else
{
if(rt->r==NULL)
{
node *temp=(node *)malloc(sizeof(node));
temp->data=data;
temp->l=temp->r=NULL;
rt->r=temp;
}
///InsertBST(rt->r,data);///开始时候忘了else
else
InsertBST(rt->r,data);
}
}
}
void ClearBST(node *rt)
{
if(rt!=NULL)
{
ClearBST(rt->l);
ClearBST(rt->r);
free(rt);
}
}
void NLR(node *rt)
{
if(rt!=NULL)
{
printf("%d ",rt->data);
NLR(rt->l);
NLR(rt->r);
}
else
return ;
}
void LNR(node *rt)
{
if(rt==NULL)
{
return ;
}
else
{
LNR(rt->l);
printf("%d ",rt->data);
LNR(rt->r);
}
}
void LRN(node *rt)
{
if(rt==NULL)
{
return ;
}
else
{
LRN(rt->l);
LRN(rt->r);
printf("%d ",rt->data);
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int data;
root=NULL;///初始为空树
for(int i=0;i<n;i++)
{
scanf("%d",&data);
InsertBST(root,data);
}
NLR(root);
printf("\n");
LNR(root);
printf("\n");
LRN(root);
printf("\n");
ClearBST(root);
}
return 0;
}