zoukankan      html  css  js  c++  java
  • 二叉树基础操作

    #include<bits/stdc++.h>
    #define de(x) cout<<#x<<"="<<x<<endl;
    #define rep(i,a,b) for(int i=a;i<(b);++i)
    #define repd(i,a,b) for(int i=a;i>=(b);--i)
    #define ll long long
    #define mt(a,b) memset(a,b,sizeof(a))
    #define fi first
    #define se second
    #define inf 0x3f3f3f3f
    #define INF 0x3f3f3f3f3f3f3f3f
    #define pii pair<int,int>
    #define pdd pair<double,double>
    #define pdi pair<double,int>
    #define mp(u,v) make_pair(u,v)
    #define sz(a) a.size()
    #define ull unsigned long long
    #define ll long long
    #define pb push_back
    #define PI acos(-1.0)
    const int mod = 1e9+7;
    const int maxn = 1e3+5;
    const double EPS = 1e-6;
    using namespace std;
    struct node{
        int v,sum;    
    }tree[2*2*maxn];
    int a[maxn];
    int n;
    void buildtree(int k){
        if(k>n) return;
        tree[k].v=a[k];
        buildtree(k<<1);
        buildtree((k<<1)+1);
        tree[k].sum=tree[(k<<1)].v+tree[(k<<1)+1].v;
    }
    void xianxu1(int k){//先序输出(递归)
        if(tree[k].v==0) return;
        printf("%d ",tree[k].v);
        xianxu1(k<<1);
        xianxu1((k<<1)+1);
    }
    void xianxu2(){//先序输出(非递归)
        stack<int> st;
        st.push(1);
        int k=1;
        while(st.size()){
            while(tree[k].v!=0){
                printf("%d ",tree[k].v);
                if(tree[2*k].v!=0||tree[2*k+1].v!=0) st.push(k);
                k=2*k;
            }
            k=st.top();
            k=2*k+1;
            st.pop();
    //        if(tree[2*k+!].v!=0) printf("%d ",tree[2*k+1].v);
        }
    }
    void zhongxu1(int k){//中序输出(递归)
        if(tree[k].v==0) return;
        zhongxu1(k<<1);
        printf("%d ",tree[k].v);
        zhongxu1((k<<1)+1);
    }
    void zhongxu2(){//中序输出(非递归)
        stack<int> st;
        st.push(1);
        int k=1;
        while(st.size()||tree[k].v!=0){
            while(tree[k].v!=0){
                //printf("%d ",tree[k].v);
    //            if(tree[2*k].v!=0||tree[2*k+1].v!=0) {
    //                de(k);
    //                st.push(k);
    //            }
                if(k!=1) st.push(k);
                k=2*k;
            }
            k=st.top();
            //de(k);
            printf("%d ",tree[k].v);
            k=2*k+1;
            st.pop();
    //        if(tree[2*k+!].v!=0) printf("%d ",tree[2*k+1].v);
        }
    }
    void houxu1(int k){//后序输出(递归)
        if(tree[k].v==0) return;
        houxu1(k<<1);
        houxu1((k<<1)+1);
        printf("%d ",tree[k].v);
    }
    int main()
    {
        mt(tree,0);
        scanf("%d",&n);
        rep(i,1,n+1) scanf("%d",a+i);
        buildtree(1);
    //    rep(i,1,n+1) printf("%d ",tree[i].v);
    //    xianxu1(1);
    //    cout<<endl;
    //    xianxu2();
    //    zhongxu1(1);
    //    cout<<endl;
    //    zhongxu2();
        houxu1(1);
        return 0;
    }
    /*
        本篇代码记录的是二叉树的数组建树,和先序输出(递归和非递归),中序输出(递归和非递归),还有后序输出(递归)
    */
  • 相关阅读:
    xml
    反射
    类加载器
    tcp通信
    UDP通信
    UDP与TCP协议
    网络通信协议
    符合汽车安全和质量标准的CYPRESS FRAM
    SRAM是什么存储器
    网络通信与便携式应用驱动SRAM技术发展
  • 原文地址:https://www.cnblogs.com/chinacwj/p/7617670.html
Copyright © 2011-2022 走看看