1. 程式人生 > 實用技巧 >資料結構/PTA-據後序和中序遍歷輸出先序遍歷/樹

資料結構/PTA-據後序和中序遍歷輸出先序遍歷/樹

據後序和中序遍歷輸出先序遍歷

-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>
using
namespace 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); }