Problem C.二叉树(2017计算机)

题目描述

输入二叉树的前序遍历和中序遍历结果,输出二叉树的后序遍历结果 输入格式 第一行为二叉树先序遍历结果 第二行为二叉树中序遍历结果。

输出格式

二叉树后序遍历结果。

Example
Inputs

426315
623415

Outputs

632514
#include<bits/stdc++.h>
using namespace std;
typedef struct BNode {
	char data;
	struct BNode *lchild,*rchild;
} BNode,*btree;
btree buildtree(char pre[],int l1,int r1,char in[],int l2,int r2) {
	BNode *t;
	int i;
	t=(BNode *)malloc(sizeof(BNode));
	t->data=pre[l1];
	for(i=l2; in[i]!=t->data; i++); //寻找根在中序遍历的位置
	int len1=i-l2,len2=r2-i;
	if(len1>0) { //如果有左子树
		t->lchild=buildtree(pre,l1+1,l1+len1,in,l2,l2+len1-1);
	} else
		t->lchild=NULL;
	if(len2>0) {
		t->rchild=buildtree(pre,r1-len2+1,r1,in,r2-len2+1,r2);
	} else 
		t->rchild=NULL;
	return t;
}
void postorder(btree t) {
	if(t->lchild) postorder(t->lchild);
	if(t->rchild) postorder(t->rchild);
	cout<<t->data;
}
int main() {
	BNode *t;
	int i=0;
	string pre,in;
	cin>>pre>>in;
	int l1=pre.size();
	char str1[l1],str2[l1];
	for(int i=0; i<l1; i++) {
		str1[i]=pre[i];
		str2[i]=in[i];
	}
	t=buildtree(str1,0,l1-1,str2,0,l1-1);
	postorder(t);
	cout<<endl;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值