?1.先找根(后序最后一個元素)
2.以根分中序為兩個中序即:
(相當于分為兩個子樹)
A中序? 對應->A后序 (長度對應)
B中序?對應->B后序? (長度對應)
遞歸循壞即可(中序長度小于等于0退出)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
找先序遍歷
#include<iostream>
#include<string.h>
using namespace std;
void finds(string mid, string after)
{if (mid.size() > 0){char ch = after[after.size() - 1];int root = mid.find(ch);cout << ch;// 分為第一棵樹,中序(左根右) 后序(左右根)finds(mid.substr(0, root), after.substr(0, root));// 第二棵樹 中序 后序// substr(pos(起始),len(從起始遍歷的長度))finds(mid.substr(root + 1), after.substr(root,mid.size()-1-root ));}
}
int main()
{string mid, after;cin >> mid >> after;finds(mid, after);return 0;
}