• 二叉排序树


    题目描述

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

    输入

    输入第一行包括一个整数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;
    }
  • 相关阅读:
    ubuntu下安装常用软件合集
    Ubuntu16升级到18
    VScode安装教程
    查看系统信息脚本
    Excel应用笔记
    后缀数组
    笔记-AHOI2013 差异
    二分图
    动态规划dp
    笔记-CF1354E Graph Coloring
  • 原文地址:https://www.cnblogs.com/sz-wcc/p/11071945.html
Copyright © 2020-2023  润新知