资源简介

从二叉树的后序和中序序列得到二叉树的先序序列,算法采用了递归的思想,容易理解。

资源截图

代码片段和文件信息

#include 
#include 

using namespace std;

void FLAMTF(int m1 int m2 int l1 int l2 string mT string lT){
if(m2 - m1 <= 0){
if(m2 - m1 == 0)
cout << lT.at(l2);//当仅有一个元素时输出
return;//当m2 - m1 < 0时,说明没有右/左子树,不输出,返回
}
int m = 0;
for(int i = 0; i < mT.size(); i++){
if(mT.at(i) == lT.at(l2)){
m = i;
break;
}
}
if(m >= mT.size()){
cout << “输入的序列不能构成二叉树“ << endl;
exit(0);
}//两个序列中含有不同的元素,肯定不能构成二叉树
if(m2 - m1 > 0){
cout << lT.at(l2);
FLAMTF(m1 m - 1 l1 l1 + m - m1 - 1 mT lT);
FLAMTF(m + 1 m2 l1 + m - m1 l1 + m2 - m1 - 1  mT lT);
}//这个式子一定要仔细推出
}//从后序和中序的到先序

void FFAMTL(int f1 int f2 int m1 int m2 string fT string mT){
if(m2 - m1 <= 0){
if(m2 - m1 == 0)
cout << fT.at(f1);//当仅有一个时就输出
return;
}
int m = 0;
for(int i = 0; i < mT.size(); i++){
if(mT.at(i) == fT.at(f1)){
m = i;
break;
}
}
if(m >= mT.size()){
cout << “输入的序列不能构成二叉树“ << endl;
exit(0);
}//两个序列中含有不同的元素,肯定不能构成二叉树
if(m2 - m1 > 0){
FFAMTL(f1 + 1 f1 + m - m1 m1 m - 1 fT mT);
FFAMTL(f1 + m - m1+ 1 f2 m + 1

评论

共有 条评论