算法竞赛入门经典(第2版)习题6-3 二叉树重建 UVa536

时间:2020-11-29 00:15:40

思路:
1 确定根,确定左子树,确定右子树。

2 在左子树中递归。

3 在右子树中递归。

4 打印当前根。

#include<iostream>
#include<string>
struct bitree
{
char data;
};

void creat(string Pre, int ps, int pe, string In, int is, int ie)
{
bitree *t;
int i;
if (ps > pe)return ;
t = new bitree;//生成根节点
i = is;
while (In[i] != Pre[ps])i++;//寻找中序序列根节点(位置为i)
//左子树 参数分别是先序序列,先序开始的位置,先序结束的位置
//中序序列,中序开始的位置,中序结束的位置
creat(Pre, ps + 1, ps + i - is, In, is, i - 1);
creat(Pre, ps + i - is + 1, pe, In, i + 1, ie);
cout << t->data ;
}

int main(int argc, char* argv[])
{
string pr, in;
cout << "输入先序遍历:";
cin >> pr;
cout << "输入中序遍历: ";
cin >> in;
creat(pr, 0, pr.size() - 1, in, 0, in.size() - 1);
cout << endl;
return 0;
}