【九度OJ】题目1201:二叉排序树

复习数据结构,建树和树的三种遍历

二叉排序树的查询,插入

 

二叉排序树插入一个节点,此节点一定是叶子节点

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>

using namespace std;

typedef long long ll;

typedef struct Node
{
    int key;
    struct Node *lt,*rt;
}Tree;
int a[105],d,b[105],d1,c[105],d2;
Tree *q;

Tree* search_t(Tree* p,int key)
{
    Tree *now;
    q = now = p;
    while(now)
    {
        if(now->key==key) return now;
        else if(now->key < key)
        {
            q = now;
            now = now->rt;
        }
        else
        {
            q = now;
            now = now->lt;
        }
    }
    return NULL;
}

void insert_t(Tree* p,int key)
{
    Tree *t;
    t = (Tree*)malloc(sizeof(Tree));
    t->key = key;
    t->lt = t->rt = NULL;

    if(p==NULL) p = t;
    else if(p->key>key) p->lt=t;
    else p->rt=t;
}

void LTR(Tree *q)
{
    Tree *pp=q;
    if(pp==NULL) return;
    if(pp->lt) LTR(pp->lt);
    a[d++] = pp->key;
    if(pp->rt) LTR(pp->rt);
}
void TLR(Tree *q)
{
    Tree *pp=q;
    if(pp==NULL) return;
    b[d1++] = pp->key;
    if(pp->lt) TLR(pp->lt);
    if(pp->rt) TLR(pp->rt);
}
void LRT(Tree *q)
{
    Tree *pp=q;
    if(pp==NULL) return;
    if(pp->lt) LRT(pp->lt);
    if(pp->rt) LRT(pp->rt);
    c[d2++] = pp->key;
}
int main()
{
    int n,x;
    while(~scanf("%d",&n))
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(a));
        memset(c,0,sizeof(a));

        Tree *r;
        scanf("%d",&x);
        r = (Tree*)malloc(sizeof(Tree));
        r->key = x;
        r->lt =r->rt = NULL;
        for(int i=1;i<n;i++)
        {
            scanf("%d",&x);
            if(!search_t(r,x))
                insert_t(q,x);
        }
        d = d1=d2=0;
        TLR(r);
        LTR(r);
        LRT(r);
        for(int i=0;i<d1;i++)
            printf("%d ",b[i]);
        printf("\n");
        for(int i=0;i<d;i++)
            printf("%d ",a[i]);
        printf("\n");
        for(int i=0;i<d2;i++)
            printf("%d ",c[i]);
        printf("\n");
    }
    return 0;
}

  

 

posted @ 2015-07-27 10:03  fukan  阅读(155)  评论(0编辑  收藏  举报