树的遍历(前序中序求后序,后序中序求前序)

Posted xiaowuga

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树的遍历(前序中序求后序,后序中序求前序)相关的知识,希望对你有一定的参考价值。

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

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

//Author: xiaowuga
#include <bits/stdc++.h>
using namespace std;
const long long N=100000; 
int f[N],m[N];
void solve(int a,int b,int n){
    if(n==1){ cout<<f[a]<< ;return;}
    if(n<=0) return;
    int i;
    for(i=0;f[a]!=m[b+i];i++);
    solve(a+1,b,i);
    solve(a+i+1,b+i+1,n-i-1);
    cout<<f[a]<< ;
}
int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    int n;
    cin>>n; 
    for(int i=1;i<=n;i++) cin>>f[i];
    for(int i=1;i<=n;i++) cin>>m[i];
    solve(1,1,n);
    cout<<endl;
    return 0;
}

后序,中序求前序:

//Author: xiaowuga
#include <bits/stdc++.h>
using namespace std;
const long long N=100000; 
int m[N],b[N];
void solve(int l,int r,int n){
    if(n==1){ cout<<b[l]<< ; return;}
    if(n<=0) return;
    int i; 
    for(i=0;b[l]!=m[r-i];i++);
    cout<<b[l]<< ; 
    solve(l-i-1,r-i-1,n-i-1);
    solve(l-1,r,i);
}
int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    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;
}

 

以上是关于树的遍历(前序中序求后序,后序中序求前序)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树面试题:前中序求后序中后序求前序

已知前序中序求后续;已知中序后序求前序;

PAT A1086 Tree Traversals Again [二叉树前序中序求后序]

POJ2255-已知二叉树前序中序求后序

已知先序中序求后序的算法:

怎么根据二叉树的前序,中序,确定它的后序