P1827 [USACO3.4] 美国血统 American Heritage 洛谷

题目链接:https://www.luogu.com.cn/problem/P5076

思路:

        递归 ( 具体以后再补充 )

        见代码有注释,希望注释有用......

代码如下:

#include<iostream>
#include<string>

using namespace std;

string pre, inor;

void tree(string pre, string inor)
{
	if (pre.empty())    //空则返回
	{
		return;
	}

	char root = pre[0];                                 //先序中第一个结点一定是根节点

	int k = inor.find(root);                            //在中序中查找根结点的位置

	pre.erase( pre.begin ( ) );                         //删除根结点,后续寻找新的根结点
	
	string leftpre, rightpre, leftinor, rightinor;      //不能进行全局声明,不然会超时

    leftpre = pre.substr(0, k);                         //截取左子树的先序列
	leftinor = inor.substr(0, k);                       //截取左子树的中序列

	rightpre = pre.substr(k);                           //截取右子树的先序列
	rightinor = inor.substr(++k);                       //截取右子树的中序列

	tree(leftpre, leftinor);                            //遍历左子树
	tree(rightpre, rightinor);                          //遍历右子树

	cout << root;                               

}

int main()
{
	cin >> inor >> pre;

	tree(pre, inor);

	return 0;
}

欢迎路过的大佬能指出不足 ^-^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值