中国大学MOOC-陈越、何钦铭-数据结构-2018秋 03-树3 Tree Traversals Again (25 分)

#include "pch.h"
#include <iostream>

#include <string>
#include <stack>

using namespace std;

int preorder[35], inorder[35];
int pre_index = 0, in_index = 0, N, cnt = 0;

int get();
void build(int pre_begin, int pre_end, int in_begin, int in_end);
int main()
{
	cin >> N;
	stack<int> sta;
	for (int i = 0; i < 2 * N; i++) {

		int tmp = get();

		if (tmp != -1) {

			sta.push(tmp);
			preorder[pre_index++] = tmp;

		}
		else {

			inorder[in_index++] = sta.top();
			sta.pop();

		}
	}

	build(0, N - 1, 0, N - 1);
	return 0;
}

int get()
{
	int tmp;
	string s;
	
	cin >> s;

	if (s[1] == 'o') return -1;
	cin >> tmp;
	return tmp;
}

void build(int pre_begin, int pre_end, int in_begin, int in_end)
{
	if (pre_begin > pre_end) return;

	int root = preorder[pre_begin];
	int in_root = in_begin;

	while (inorder[in_root] != root) in_root++;

	build(pre_begin + 1, pre_begin + in_root - in_begin, in_begin, in_root - 1);
	build(pre_begin + in_root - in_begin + 1, pre_end, in_root + 1, in_end);

	if (cnt++ != 0) putchar(' ');
	cout << root;
}
Download as text 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值