首先回顾一下已知后续和中序求前序:
#include
using namespace std;
int post[] = {3, 4, 2, 6, 5, 1};
int in[] = {3, 2, 4, 1, 6, 5};
void pre(int root, int start, int end) {
if(start > end) return ;
int i = start;
while(i < end && in[i] != post[root]) i++;
printf("%d ", post[root]);
pre(root - 1 - end + i, start, i - 1);
pre(root - 1, i + 1, end);
}
int main() {
pre(5, 0, 5);
return 0;
}
然后该题与求前序差不多,根据二叉树的性质 利用map把序号存下来,(如果直接用vector需要进行判断是否为空,可能不是全满的)
#include
#include