1. 程式人生 > >6-3 二叉樹的重建 uva536

6-3 二叉樹的重建 uva536

spl namespace isp clu n) include class pri while

已知先序和中序 求後序

可以有兩種方式輸出

一種是建好樹按照樹輸出

一種是不建樹 在遍歷的過程中存入vector 再倒敘輸出

技術分享圖片
#include<bits/stdc++.h>
using namespace std;

int ri[1000];int le[1000];
char xian[30],zhong[30];vector<char>ans;

int built(int x1,int y1,int x2,int y2)
{
    if(x2>y2||x1>y1)return 0;

    char root=xian[x1];
     ans.push_back(root);
    
int p=x2; while(zhong[p]!=root)p++; int cnt=p-x2; ri[root]=built(x1+cnt+1,y1,x2+cnt+1,y2); le[root]=built(x1+1,x1+cnt,x2,x2+cnt-1); return root; } void dfs(int root) { if(le[root]){dfs(le[root]);} if(ri[root]){dfs(ri[root]);} printf("%c",root); return; }
int main() { while(scanf("%s %s",xian+1,zhong+1)==2) { ans.clear(); int n=strlen(xian+1); int root=built(1,n,1,n); //for(int i=ans.size()-1;i>=0;i--) // cout<<ans[i]; dfs(root); cout<<endl; } return 0; }
View Code

6-3 二叉樹的重建 uva536