二叉排序树

题目描述

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

输入

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

输出

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

样例输入

1
2
2
8 15
4
21 10 5 39

样例输出

2
2
2
8 15
8 15
15 8
21 10 5 39
5 10 21 39
5 10 39 21

瞎搞的。。。

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define ll long long
#define INF -72340172838076674
using namespace std;
ll n;
struct E{
    ll num,lson,rson;
}e[120];
ll cnt=0,root=INF;
ll find(ll x){
    x=e[x].num;
    ll cur=root;
    while(1){
        if(x<e[cur].num){
            if(e[cur].lson==INF){
                return cur;
            }
            else{
                cur=e[cur].lson;
            }
        }
        else if(x>e[cur].num){
            if(e[cur].rson==INF){
                return cur;
            }
            else{
                cur=e[cur].rson;
            }
        }
        else return INF;
    }
}
void Insert(ll x){
    if(!cnt){
        cnt++;
        root=x;
        return; 
    }
    ll fat=find(x);
    if(fat==INF) return;
    cnt++;
    if(e[x].num>e[fat].num){
        e[fat].rson=x;
    }
    else{
        e[fat].lson=x;
    }
    return;
}
void dfs1(ll x){
    if(x==INF) return;
    cout<<e[x].num<<' ';
    dfs1(e[x].lson);
    dfs1(e[x].rson);
}
void dfs2(ll x){
    if(x==INF) return;
    dfs2(e[x].lson);
    cout<<e[x].num<<' ';
    dfs2(e[x].rson);
}
void dfs3(ll x){
    if(x==INF) return;
    dfs3(e[x].lson);
    dfs3(e[x].rson);
    cout<<e[x].num<<' ';
}
int main(){
    while(cin>>n){
        root=INF,cnt=0;
        memset(e,-0x2,sizeof(e));
        for(int i=1;i<=n;i++){
            ll x;
            cin>>x;
            e[i].num=x;
            Insert(i);
        }
        dfs1(root);
        cout<<endl;
        dfs2(root);
        cout<<endl;
        dfs3(root);
        cout<<endl;
    }
     
    return 0;
}
posted @ 2019-06-23 10:12  CCWUCMCTS  阅读(245)  评论(0编辑  收藏  举报