解题思路:
以先序遍历为基础,找到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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论