日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

PAT-1127. ZigZagging on a Tree (30)

發(fā)布時(shí)間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT-1127. ZigZagging on a Tree (30) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1127. ZigZagging on a Tree (30)

時(shí)間限制
400 ms
內(nèi)存限制
65536 kB
代碼長(zhǎng)度限制
16000 B
判題程序
Standard
作者
CHEN, Yue
Suppose 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:
8
12 11 20 17 1 15 8 5
12 20 17 11 15 8 5 1
Sample Output:

1 11 5 8 17 12 20 15



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


我們可以先還原出樹(shù) 然后在把樹(shù)dfs一遍 推出每層的節(jié)點(diǎn)有多少 ?記錄下來(lái) 在用一個(gè)bfs搞出層序遍歷存到vector里

?然后再根據(jù)每層的節(jié)點(diǎn)數(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; }

總結(jié)

以上是生活随笔為你收集整理的PAT-1127. ZigZagging on a Tree (30)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。