建立一颗二叉排序树,并进行前、中、后序遍历
输入一系列整数,建立二叉排序树,进行前序、中序、后序遍历。
样例1:
输入:
5
1 6 5 9 8
输出:
1 6 5 9 8
1 5 6 8 9
5 8 9 6 1
思路:先建二叉排序树,再进行遍历。关键在于建树操作,详见注释。
/*
输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历
*/
#include<iostream>
using namespace std;
struct Node{//树的节点结构
struct Node *lchild;
struct Node *rchild;
int data;
}Tree[100];
int cnt=0;//树的节点数
//建立一个新节点
Node *create()
{
Tree[cnt].lchild=Tree[cnt].rchild=NULL;
return &Tree[cnt++];
}
//插入节点,建二叉排序树树(关键)
Node *Insert(Node *T,int x)
{
if(T==NULL)
{
T=create();
T->data=x;
return T;
}
else if(x>T->data)
T->rchild=Insert(T->rchild,x);
else if(x<T->data)
T->lchild=Insert(T->lchild,x);
return T;
}
//前序遍历
void PreOrder(Node *T)
{
printf("%d ",T->data);
if(T->lchild!=NULL)
PreOrder(T->lchild);//注意不能有return
if(T->rchild!=NULL)
PreOrder(T->rchild);
}
//中序遍历
void InOrder(Node *T)
{
if(T->lchild!=NULL)
InOrder(T->lchild);
printf("%d ",T->data);
if(T->rchild!=NULL)
InOrder(T->rchild);
}
//后序遍历
void PostOrder(Node *T)
{
if(T->lchild!=NULL)
PostOrder(T->lchild);
if(T->rchild!=NULL)
PostOrder(T->rchild);
printf("%d ",T->data);
}
int main()
{
int n,x;
cin>>n;
Node *T=NULL;
while(n--)
{
cin>>x;
T=Insert(T,x);
}
PreOrder(T);
printf("\n");
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
}