zoukankan      html  css  js  c++  java
  • Binary Tree Traversals 中序和前序求后序遍历

    二叉树的遍历,这个题不能用T[4*N]建树,因为最坏的情况树很深,数组会爆的,2^1000

    s所以求后续遍历的话,就反着来  根节点—>右子树—>左子树,然后把结果用stack存起来倒叙输出就好了

    // preorder sequence    inorder sequence  postorder sequence.
    #include<bits/stdc++.h>
    #define endl '
    '
    #define _for(i,a,b) for(int i=a;i<b;i++)
    using namespace std;
    const int N = 1055;
    typedef long long ll; 
    int pre[N],in[N];
    stack<int> Sta;
    void Build( int s1,int e1,int s2,int e2 ){//s1e1是前序的,s2e2是中序的  
        Sta.push( pre[s1] );
        int cnt = 0;
        _for(i,s2,e2+1){
             if( in[i] == pre[s1] ) break;
            cnt++;
        } 
        if( s1+cnt+1<=e1 )
             Build( s1+cnt+1,e1,s2+cnt+1,e2 );
        if( s1+1<=s1+cnt )
             Build( s1+1,s1+cnt,s2,s2+cnt-1 );
    }  
    int main(){
        ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);  
        int n;
        while(cin>>n){  
            _for(i,1,n+1) cin>>pre[i];
            _for(i,1,n+1) cin>>in[i];
            Build( 1,n,1,n ); 
            cout<<Sta.top(); Sta.pop();
            while( Sta.size() ){
                cout<<' '<<Sta.top(); Sta.pop();
            }
            cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    IO细述
    如何对HashMap按键值排序
    Java编程思想重点
    Java笔试题解答和部分面试题
    mysql优化
    MySQL 创建数据库并且指定编码
    JDBC 工具类
    JSP include标签和include指令
    SpingMVC ModelAttribute的用法
    Java 获取amr音频格式的音频长度
  • 原文地址:https://www.cnblogs.com/SunChuangYu/p/12458923.html
Copyright © 2011-2022 走看看