思路:
借鉴了姥姥MOOC发布的代码,加了许多自己理解的注释,具体的思路在代码的注释里。
总的思路就是:把这道题转换成,已知前序、中序,求后序。
运行结果:
代码如下:
#include<iostream>
using namespace std;
#include<string>
#include<stack>
#define Max 30
int pre[Max]; //前序遍历数组
int in[Max]; //中序遍历数组
int post[Max]; //后序遍历数组
int N; //定义树中结点个数
//接收输入,并搞出前序、中序遍历数组
int InputTree()
{
//输入树的节点数
int N;
cin >> N;
//通过用户输入来提取出前序、中序数组
//存前序的数组有n个元素,存中序的数组也有n个元素
//所以共循环2n次
string s; //定义接收输入push和pop的字符串
stack<int> st; //定义接收输入数据的堆栈
int a; //定义输入为Push时,要接收数据的变量
int b1 = 0; //用于记录pre[]中的下标
int b2 = 0; //用于记录in[]中的下标
//开始循环接收数据,并存入到前序和中序数组中
for (int i = 0; i < 2 * N; i++)
{
cin >> s;
if (s &