6-3 二叉樹的重建 uva536
阿新 • • 發佈:2019-01-25
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);View Codeint 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; }
6-3 二叉樹的重建 uva536