二叉排序树(牛客北邮机试题)//构造二叉排序树+先序中序后序遍历

题目描述

输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

输入描述:

输入第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。

输出描述:

可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
每种遍历结果输出一行。每行最后一个数据之后有一个空格。

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

示例1

输入

5
1 6 5 9 8

输出

1 6 5 9 8 
1 5 6 8 9 
5 8 9 6 1 

AC代码:

#include
using namespace std;
struct Node
{
    int x;
    Node *l,*r;
};
void build(Node *t,int x)
{
    if(xx)
    {
        if(t->l==NULL)
        {
            Node *n=new Node();
            n->x=x;
            n->l=NULL;
            n->r=NULL;
            t->l=n;
        }
        else build(t->l,x);
    }
    
    if(x>t->x)
    {
        if(t->r==NULL)
        {
            Node *n=new Node();
            n->x=x;
            n->l=NULL;
            n->r=NULL;
            t->r=n;
        }
        else build(t->r,x);
    }
    //cout<<1<x);
    if(n->l!=NULL)pre(n->l);
    if(n->r!=NULL)pre(n->r);
}
void in(Node *n)
{
    
    if(n->l!=NULL)in(n->l);
    printf("%d ",n->x);
    if(n->r!=NULL)in(n->r);
}
void post(Node *n)
{
    
    if(n->l!=NULL)post(n->l);
    if(n->r!=NULL)post(n->r);
    printf("%d ",n->x);
}
int main()
{
    int n,i,j,x;
    while(~scanf("%d",&n))
    {
        Node *t;
        t=new Node();
        t->l=NULL;
        t->r=NULL;
        //memset(no,-1,sizeof(no));
        for(i=0;ix=x;
            else
            {
                build(t,x);
            }
        }
        //cout<<1<

优化后代码:

#include
using namespace std;
struct Node
{
    int x;
    Node *l,*r;
};
Node *build(Node *t,int x)
{
    if(t==NULL)
    {
        Node *n=new Node();
        n->x=x;
        n->l=n->r=NULL;
        return n;
    }
	if(xx)
    {
        
        t->l=build(t->l,x);
    }else if(x>t->x)
    {
        t->r=build(t->r,x);
    }
    //cout<<1<x);
    if(n->l!=NULL)pre(n->l);
    if(n->r!=NULL)pre(n->r);
}
void in(Node *n)
{
    
    if(n->l!=NULL)in(n->l);
    printf("%d ",n->x);
    if(n->r!=NULL)in(n->r);
}
void post(Node *n)
{
    
    if(n->l!=NULL)post(n->l);
    if(n->r!=NULL)post(n->r);
    printf("%d ",n->x);
}
int main()
{
    int n,i,j,x;
    while(~scanf("%d",&n))
    {
        Node *t=NULL;
        for(i=0;i

 

你可能感兴趣的:(北邮机试/OJ,树与二叉树)