首页 > 编程知识 正文

根据前序序列和中序序列,已知前序序列和后序序列

时间:2023-05-06 06:22:46 阅读:249423 作者:3325

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

题目:
 

描述输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。输入输入文件为tree.in,共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。输出输出文件为tree.out,仅一行,表示树的后序遍历序列。样例输入abdecdbeac样例输出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;}

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

TikTok半月报来了

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。