zoukankan      html  css  js  c++  java
  • 树的遍历(前序中序求后序,后序中序求前序)

    首先必须要有中序遍历以及前序和后序之中的一种才能求第三种,也就是说没有中序遍历树的结构是不确定的。

    首先中序,前序,求后序:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100000;
    int f[N],m[N],n;
    void solve(int x,int y,int n){//x表示当前子树的前序遍历的第一个数字的位置,y表示当前子树中序遍历的第一个数字的位置,n表示当前子树的节点个数
        if(n==1){
            cout<<f[x]<<' ';
            return ;
        }
        if(n==0) return;
        int i=0;
        while(m[y+i]!=f[x]) i++;
        solve(x+1,y,i);
        solve(x+i+1,y+i+1,n-i-1);
        cout<<f[x]<<' ';
    }
    int main(){
        int n;cin>>n;
        for(int i=1;i<=n;i++) cin>>m[i];
        for(int i=1;i<=n;i++) cin>>f[i];
        solve(1,1,n);
        cout<<endl;
        return 0;
    }

    后序,中序求前序:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100000;
    int b[N],m[N],n;
    void solve(int x,int y,int n){//x表示当前子树后续遍历的最后一个数字,y表示当前子树中序遍历的最后一个数字,n表示当前子树的节点个数
        if(n==1){
            cout<<b[x]<<' ';
            return ;
        }
        if(n==0) return;
        int i=0;
        while(m[y-i]!=b[x]) i++;
        cout<<b[x]<<' ';
        solve(x-i-1,y-i-1,n-i-1);
        solve(x-1,y,i);
    }
    int main(){
        int n;cin>>n;
        for(int i=1;i<=n;i++) cin>>b[i];
        for(int i=1;i<=n;i++) cin>>m[i];
        solve(n,n,n);
        cout<<endl;
        return 0;
    }
  • 相关阅读:
    转载--php函数使用--var_export
    ZkApi的方法跨域访问ZkResource的静态资源文件出现的问题
    修改html内联样式的方法
    linux下的npm安装
    爬虫之静态网页爬虫(基础知识)
    利用jQuery使用HTML的formdata属性实现文件上传
    细说form表单
    session
    cookie和session(会话跟踪)
    同源策略和跨域问题
  • 原文地址:https://www.cnblogs.com/xiaowuga/p/7684570.html
Copyright © 2011-2022 走看看