資料結構/PTA-據後序和中序遍歷輸出先序遍歷/樹
阿新 • • 發佈:2020-10-31
據後序和中序遍歷輸出先序遍歷
-1 根據後序和中序遍歷輸出先序遍歷 (25分)
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。
輸入格式:
第一行給出正整數N(≤30),是樹中結點的個數。隨後兩行,每行給出N個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。
輸出格式:
在一行中輸出Preorder:
以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多餘空格。
輸入樣例:
7 2 3 1 5 7 6 4 1 2 3 4 5 6 7
輸出樣例:
Preorder: 4 1 3 2 6 5 7
#include<bits/stdc++.h> usingnamespace std; typedef struct BiTNode { struct BiTNode *lchild; struct BiTNode *rchild; int data; } BiTNode, *BiTree; BiTree Plustree(int *in,int *post,int n) { if(n<=0) return NULL; else { BiTree T=new BiTNode; T->data=post[n-1]; int i=0;for(i=0; i<n; i++) { if(post[n-1]==in[i]) break; } T->lchild = Plustree(in, post, i); T->rchild = Plustree(in+i+1,post+i,n-i-1); return T; } } void preorderTraversal( BiTree BT )//前序遍歷 { if(BT){ cout << "" << BT->data; preorderTraversal(BT->lchild); preorderTraversal(BT->rchild); } } int main() { int n; scanf("%d",&n); int b[32],a[32]; BiTree T; for(int i=0; i<n; i++) cin>>a[i]; for(int i=0; i<n; i++) cin>>b[i]; T=Plustree(b,a,n); printf("Preorder:"); preorderTraversal(T); }