给树的后序和中序遍历,求先序遍历
假设有一棵树长这样
很容易写出他的后序遍历DBAGFEC
也很容易写出他中序遍历DABCGEF
1.后序遍历是前后根,根节点永远是最后一个,因此我们可以找到根节点c
2.要我们输出前序遍历,因为根节点永远在前面,所以每次找到就输出就好了
3.之后用find函数找到根节点c在中序遍历中的位置,划分为两段DAB GEF,然后中序遍历这两段,注意一定要是先递归DAB再递归GEF不然的话就是根后前而不是根前后了
4.也将后序遍历划分为两段DAB GFE,用后序遍历递归下去
好了,直接上代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
void dg(string a,string b) {
if (a.size() > 0) {
char c = b[b.size() - 1];
cout << c;
int k = a.find(c);
dg(a.substr(0, k), b.substr(0, k));
dg(a.substr(k + 1), b.substr(k ,b.size()-k-1));
}·
}
int main() {
ios::sync_with_stdio(false);
string in,aft;
cin >> in >> aft;
dg(in, aft);
}
给出前序遍历和中序遍历求后序遍历
#include<iostream>
using namespace std;
void dfs(string a, string b) {
if (a.size() <= 0)return;
char c = b[0];
int x = a.find(c);
dfs(a.substr(0, x), b.substr(1, x));
dfs(a.substr(x + 1), b.substr(b.size()-x));
cout << c;
}
int main() {
string a, b;
cin >> a >> b;
dfs(a, b);
}
给出前序遍历和后序遍历求中序遍历