Tree UVa548

#include<iostream>
#include<sstream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;

const int MAXN = 10000+10;
int in_order[MAXN], post_order[MAXN], lch[MAXN], rch[MAXN];
int n;
bool read_list(int * a);
int build(int L1, int R1, int L2, int R2);
void dfs(int u,int sum);
int best, best_sum = 100000;

int main()
{
	while(read_list(in_order)){
		read_list(post_order);
		build(0,n-1,0,n-1);
		best_sum = 1000000000;
		dfs(post_order[n-1], 0);
		cout<<best<<endl;
	}
	return 0;
}

bool read_list(int * a)
{
	char line[MAXN];
	if(!cin.getline(line,MAXN)) return false;
	stringstream ss(line);
	n = 0;
	int x;
	while(ss>>x) a[n++] = x;
	return n>0;
}

int build(int L1, int R1, int L2, int R2)
{
	if(L1>R1) return 0;
	int root = post_order[R2];
	int p=L1;
	while(in_order[p] != root)  p++;
	int cnt = p-L1;
	lch[root] = build(L1,p-1,L2,L2+cnt-1);
	rch[root] = build(p+1, R1, L2+cnt, R2-1);
	return root;
	
}

void dfs(int u,int sum)
{
	sum += u;
	if(!lch[u] && !rch[u] ){
		if(sum<best_sum || (sum == best_sum && u<best) ){
			best = u;
			best_sum = sum;
		}
	}
	if(lch[u]) dfs(lch[u], sum);
	if(rch[u]) dfs(rch[u], sum);
}

刘汝佳书中getline用法出现错误,line只能定义成char数组

猜你喜欢

转载自blog.csdn.net/qq_41667282/article/details/82702170
今日推荐