练习题:给出前序序列和中序序列,写出后续序列

讲真,看到这道题的时候,思路很明确,最起码在纸上操作的时候还是比较容易实现的,但是代码实现上还是遇到了一些困难,一下是借鉴了题解之后的写法,不是最好的,等自己明白了之后会修改的。

题目:
 

描述
输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。
输入
输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。
输出
输出文件为tree.out,仅一行,表示树的后序遍历序列。
样例输入
abdec
dbeac
样例输出
debca

直接上代码了,一些细节体现在注释的地方。顺便吐槽一下,VC++6.0真心有点用不习惯啊。

#include <iostream>
#include <string>
using namespace std;
string str1,str2;
void  Findnode(int left1,int right1,int left2,int right2)
{
    int m=str2.find(str1[left1]);
    if(m>left2)//如果根结点大于中序序列左子树的结点,那么中序序列肯定有左子树
        Findnode(left1+1,left1+m-left2,left2,m-1);
    if(m<right2) //如果根节点小于中序序列的右子树的最后一个,那么它就有右子树
         Findnode(left1+m-left2+1,right1,m+1,right2);
    cout<<str1[left1];//当遍历完输出叶结点,然后回溯输出不是叶结点的结点
}
int main()
{
    cin>>str1>>str2;
	Findnode(0,str1.length()-1,0,str2.length()-1);
	cout<<endl;
	return 0;
}

代码简短,有很强的的执行力,其他的暂时不做分析了,研究明白后会给出详细的解题步骤。

发布了47 篇原创文章 · 获赞 6 · 访问量 5219

猜你喜欢

转载自blog.csdn.net/qq_41705207/article/details/89326200