解题思路:
以先序遍历为基础,找到root后在中序遍历中找root的位置并设置好范围len,变换pre和in数组的head指针
参考代码:
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
x=x*10+ch-'0',ch=getchar();
return x*f;
}
struct Node{
char data;
Node *lchild,*rchild;
};
void postOrder(Node *root)
{
if(root==NULL)
return;
postOrder(root->lchild);
postOrder(root->rchild);
cout<<root->data;
}
int find(char c,char *in,int len)
{
for(int i=0;i<len;i++)
if(in[i]==c)
return i;
return -1;
}
Node *msn(char *pre,char *in,int len)
{
if(len<=0)
return NULL;
Node *root=new Node;
int index=find(*pre,in,len);
root->data=*pre;
root->lchild=msn(pre+1,in,index);
root->rchild=msn(pre+index+1,in+index+1,len-index-1);
return root;
}
const int N=1000;
int main()
{
char *pre=new char[N],*in=new char[N];
cin>>pre;
cin>>in;
Node *root;
root=msn(pre,in,strlen(pre));
postOrder(root);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复