zoukankan      html  css  js  c++  java
  • 二叉排序树

    题目描述

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

    输入

    输入第一行包括一个整数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;
    }
  • 相关阅读:
    vim快速查找
    一次特别二不兮兮的WebStorm经历
    让docker容器使用主机系统时间(挂入/etc/localtime)
    systemd:在service文件中给Exec传入多个参数
    mongodb数据迁移
    明日边缘;逃出克隆岛
    [C++] 类的所有对象实例共享静态类成员变量
    HTTP长连接
    fqPkzJetPK
    何时使用move
  • 原文地址:https://www.cnblogs.com/sz-wcc/p/11071945.html
Copyright © 2011-2022 走看看