国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

PAT-1127. ZigZagging on a Tree (30)

2019-11-06 06:31:10
字體:
供稿:網(wǎng)友
1127. ZigZagging on a Tree (30)時間限制400 ms內(nèi)存限制65536 kB代碼長度限制16000 B判題程序Standard作者CHEN, YueSuppose that all the keys in a binary tree are distinct positive integers. A unique binary tree can be determined by a given pair of postorder and inorder traversal sequences. And it is a simple standard routine to PRint the numbers in level-order. However, if you think the problem is too simple, then you are too naive. This time you are supposed to print the numbers in "zigzagging order" -- that is, starting from the root, print the numbers level-by-level, alternating between left to right and right to left. For example, for the following tree you must output: 1 11 5 8 17 12 20 15.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (<= 30), the total number of nodes in the binary tree. The second line gives the inorder sequence and the third line gives the postorder sequence. All the numbers in a line are separated by a space.Output Specification:For each test case, print the zigzagging sequence of the tree in a line. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.Sample Input:812 11 20 17 1 15 8 512 20 17 11 15 8 5 1Sample Output:

1 11 5 8 17 12 20 15

題意就是要按照給定的中序遍歷和后續(xù)遍歷順序輸出樹的蛇形遍歷序列 

我們可以先還原出樹 然后在把樹dfs一遍 推出每層的節(jié)點有多少  記錄下來 在用一個bfs搞出層序遍歷存到vector里

 然后再根據(jù)每層的節(jié)點數(shù)  把vector里響應(yīng)的元素reverse!

CODE:

#include<bits/stdc++.h>#include<vector>using namespace std;int in[35];int post[35];int flo[30];typedef struct node{	int key;	node *l,*r;	node(int k):key(k),l(NULL),r(NULL){}}NN,*NNN;NNN devide(int l,int r,int pl,int pr){	int i,k=post[pr],left,right;	for(i=l;in[i]!=k&&i<=r;i++);//lack ;	left = i-l;	right = r-i;	NNN p = (NNN)malloc(sizeof(NN));	p->key=k;p->l=p->r=NULL;	if(right!=0)p->r=devide(i+1,r,pr-right,pr-1);	if(left!=0)p->l=devide(l,i-1,pl,pr-right-1);	return p;}void preorder(NNN p){	if(p)	{		printf("%d ",p->key);		preorder(p->l);		preorder(p->r);	}}int flor;void dfs(NNN rt,int f){	if(rt)	{		flo[f]++;		dfs(rt->l,f+1);		dfs(rt->r,f+1);		flor=max(flor,f);	}}vector<int>res;void bfs(NNN rt){	queue<NNN>q;	q.push(rt);	while(q.size()) 	{		NNN a = q.front();q.pop();		int t = a->key;		res.push_back(t);		if(a->l!=NULL)q.push(a->l);		if(a->r!=NULL)q.push(a->r);	}} int main(){	int n;	cin>>n;	for(int i=1;i<=n;i++)scanf("%d",&in[i]);	for(int i=1;i<=n;i++)scanf("%d",&post[i]);	NNN rt;	rt=devide(1,n,1,n);	dfs(rt,1); 	bfs(rt);	int sum=0;	vector<int>::iterator ss;	vector<int>::iterator ee;	for(int i=1;i<=flor;i++)	{		if(i%2==1)		{			ss=res.begin();			for(int j=0;j<sum;j++,ss++);			ee=ss;						for(int j=0;j<flo[i];j++,ee++);			reverse(ss,ee);		}		sum+=flo[i];	}	for(int i=0;i<n;i++)	{		cout<<res[i];		if(i==n-1)cout<<endl;		else cout<<" ";	}		return 0;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 儋州市| 子洲县| 铜梁县| 四川省| 襄垣县| 新巴尔虎左旗| 江北区| 开化县| 门头沟区| 青海省| 弥勒县| 荆门市| 铅山县| 安龙县| 双牌县| 娄底市| 秀山| 浦城县| 宝坻区| 长春市| 常州市| 沽源县| 托里县| 拜泉县| 大石桥市| 嵩明县| 通化市| 涞源县| 叶城县| 台前县| 永宁县| 大庆市| 铜梁县| 眉山市| 比如县| 贺州市| 嵊州市| 伊宁市| 连平县| 章丘市| 六盘水市|