由树先序遍历和中序遍历输出其后续遍历
递归的三个必要条件
1. 弄明白递归的顺序。在递归的实现中,需要假设后续的调用已经完成,在此基础上,才实现递归的算法,先考虑后面的逻辑。
2. 分析清楚递归体的逻辑,然后写出来。具体的递归体需要解决什么样的问题。
3. 考虑清楚递归推出的边界条件。在哪些地方写return。
//============================================================================
// Name : pm2bTree.cpp
// Author : jry
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <stdio.h>
using namespace std;
void printBackSeri(int _len,const char *pro,const char *mid){
if( _len <= 1 ) { // leaf nodes
if( _len == 0 ) return;
printf("%c", pro[0]); return;
}
int splitx = 0, i = 0, llen, rlen;
for( i = 0; i < _len; i ++ )
if(pro[0]==mid[i]) splitx = i;
llen = splitx; rlen = _len-llen-1;
char lpro[llen], lmid[llen];
for( i = 0; i < llen; i ++ ){
lpro[i] = pro[1+i];
lmid[i] = mid[i];
}
printBackSeri(llen, lpro, lmid); // print back-seri left sub-tree
char rpro[rlen], rmid[rlen];
for( i = 0; i < rlen; i ++ ){
rpro[i] = pro[i+1+llen];
rmid[i] = mid[i+splitx+1];
}
printBackSeri(rlen, rpro, rmid); // print back-seri right sub-tree
printf("%c", pro[0]); // print the root
}
int main() {
cout << "start" << endl;
const char *pro = "ABDEFC", *mid = "EDFBAC";
printBackSeri(6, pro, mid);
printf("\n");
cout << "DONE" << endl; // prints DONE
return 0;
}