由树先序遍历和中序遍历输出其后续遍历
遞歸的三個必要條件
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;
}
轉載于:https://www.cnblogs.com/25-to-life/archive/2011/09/29/2195475.html
總結
以上是生活随笔為你收集整理的由树先序遍历和中序遍历输出其后续遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net FileUpload上传
- 下一篇: C#后台线程和UI的交互