讲真,看到这道题的时候,思路很明确,最起码在纸上操作的时候还是比较容易实现的,但是代码实现上还是遇到了一些困难,一下是借鉴了题解之后的写法,不是最好的,等自己明白了之后会修改的。
题目:
直接上代码了,一些细节体现在注释的地方。顺便吐槽一下,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;}代码简短,有很强的的执行力,其他的暂时不做分析了,研究明白后会给出详细的解题步骤。