#include <iostream>
using namespace std;
const int MaxSize=20; //数组的最大尺寸
int p; //一个临时的数字用来标记当前操作的数组的位置
char MidOrder[MaxSize]; //用来存储中序遍历顺序的数组
char PreOrder[MaxSize]; //用来存储先序遍历顺序的数组
//初始化的方法
void Init(){
cout << "In-order:";
cin >> MidOrder;
cout << "Pre-order:";
cin >> PreOrder;
cout << "Post-order:";
p=0;
}
//递归输出后序遍历的方法
void Find(char Mid[MaxSize]){
int q;
char temp[MaxSize];
if (Mid[0]==NULL) return;
for (int i=0;Mid[i]!='\0';i++){
if (Mid[i]==PreOrder[p]){
q=i;
//得出q
//即为当前数组中第q个是根节点
}
}
for (i=0;i<q;i++){
temp[i]=Mid[i]; //把根节点前面的节点存到t数组中
}
temp[q]='\0'; //标志字符串结束
p++;
Find(temp); //在根节点前的子树继续进行后序遍历
for (i=q+1;Mid[i]!='\0';i++) //将节点后面的传入到temp数组中
temp[i-q-1]=Mid[i];
temp[strlen(Mid)-1-q]='\0'; //加上\0标志字符串的终点
Find(temp); //在根节点后的子树继续进行后序遍历
cout << Mid[q]; //最后输出根节点
return;
}
void main(){
Init();
Find(MidOrder);
cout<<endl;
}
[C++]数据结构:二叉树中已知先序中序求后序的递归方法
最新推荐文章于 2020-12-11 15:34:15 发布