PAT 1127 不用建樹 不用bfs

一開始想法是直接建個樹 bfs把每層的節點都放到對應層數的一個vector裏面 然後輸出處理
但是看了網上的一些代碼 自己改進了下

可以直接在後序中序建樹的這個過程中就把相應層數的節點放在vector 並且我們關注的是各層的節點 重點是各層 並不需要知道各個節點的孩子節點和父母的關係 所以不用建樹

#include <cstdio>
#include <unordered_map>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 50;
int in[maxn],post[maxn];
int n;
unordered_map<int,int> inpos;

vector<int> v[maxn];

struct Node{
	int data;
	Node* left;
	Node *right;
	int layer;
};
int depth=-1;
void create(int postL,int postR,int inL,int inR,int level)
{
	if(postL>postR)
	{
		return ;
	}
	depth=max(level,depth);
	v[level].push_back(post[postR]);
	int k = inpos[post[postR]];
	int numleft = k-inL;
	create(postL,postL+numleft-1,inL,k-1,level+1);
	create(postL+numleft,postR-1,k+1,inR,level+1);
}


int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&in[i]);
		inpos[in[i]]=i;
	}
	for(int i=0;i<n;i++)
	{
		scanf("%d",&post[i]);
	}
	create(0,n-1,0,n-1,0);
	bool z=true;
	if(!v[0].empty())
		printf("%d",v[0][0]);
	for(int i=1;i<=depth;i++)
	{
		if(!z)
		{
			for(int j=v[i].size()-1;j>=0;j--)
				printf(" %d",v[i][j]);
		}
		else
		{
			for(int j=0;j<v[i].size();j++)
				printf(" %d",v[i][j]);
		}
		z = !z;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章