P1030 [NOIP2001 普及组] 求先序排列

题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 8≤8)。

输入格式

22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

输出格式

11行,表示一棵二叉树的先序。

输入输出样例

输入 

BADC
BDCA

输出

ABCD

说明/提示

【题目来源】

NOIP 2001 普及组第三题

AC代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<cstdlib>
using namespace std;
string in,last;//中序序列 后序序列
struct node{
	char data;
	node* Lchild;
	node* Rchild;
}*tree;

int num;

void buildtree(node* &root,string s){
	if(s==""){
		root=NULL;
		return;
	}
	root=new node;
	int flat,word=0;;
	for(int i=num-1;i>=0;i--){
		for(int j=0;j<s.size();j++){
			if(last[i]==s[j]){
				flat=i;
				word=1;
				break;
			}
		}
		if(word==1) break;
	}
	root->data=last[flat];
	int sum=s.find(last[flat]);
	buildtree(root->Lchild,s.substr(0,sum));
	buildtree(root->Rchild,s.substr(sum+1,num-sum-1));
}

void pre(node *root){
	if(root!=NULL){
		cout<<root->data;
		pre(root->Lchild);
		pre(root->Rchild);
	}
}

int main(){
	cin>>in>>last;
	num=last.size();
	buildtree(tree,in);
	pre(tree);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瘾ิۣۖิۣۖิۣۖิꦿ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值