Java教程

本文主要是介绍树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

建树

题目详情 (pintia.cn)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<set>
#include<vector>
#define rep(i,x,y) if ((x)<=(y)) for (register int i=(x);i<=(y);i++)
using namespace std;
struct node{
	int data;
	node *l;
	node *r;
	int level;
};
int in[100],pre[100];
bool vis[100];
vector <int> ans;
node* createtree(int prel,int pren,int inl,int inn)
{
	int k,ini=0;
	if (prel>pren)
	  return NULL;
	node* root =(node*)malloc(sizeof(struct node));
	for (ini=inl;ini<=inn;ini++)
		if (in[ini]==pre[prel])
		  break;
	k=ini-inl;
	root->data=in[ini];
	root->l=createtree(prel+1,prel+k,inl,ini-1);
	root->r=createtree(prel+k+1,pren,ini+1,inn);
	return root;
}

void cal(node* root)
{
	if (root->l!=NULL)
	{
		root->l->level=root->level+1;
		if (!vis[root->l->level])
			ans.push_back(root->l->data);
		vis[root->l->level]=true;
		cal(root->l);
	}
	if (root->r!=NULL)
	{
		root->r->level=root->level+1;
		if (!vis[root->r->level])
			ans.push_back(root->r->data);
		vis[root->r->level]=true;
		cal(root->r);
	}
}
	
int main()
{
	int n;
	cin>>n;
	rep(i,1,n)
	  scanf("%d",&in[i]);
	rep(i,1,n)
	  scanf("%d",&pre[i]);
	node* root = createtree(1,n,1,n);
	ans.push_back(root->data);
	cal(root);
	cout<<ans[0];
	rep(i,1,ans.size()-1)
	  cout<<' '<<ans[i];
	return 0;
}

这篇关于树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!