#include<stdio.h>
#include<stdlib.h>
#include<queue>
using namespace std;
int POST[32]; //存放後序遍歷
int IN[32]; //存放中序遍歷
int n; //節點數
struct node
{
int data;
node* l;
node* r;
};
node* creat(int postL,int postR,int inL,int inR)
{
if(postL>postR) //表明後續已經遍歷完了
return NULL;
node* root=(node*)calloc(1,sizeof(node)); //或者寫成 node* root=new node; 而calloc會自動初始化root更方便
root->data=POST[postR];
root->l=NULL;
root->r=NULL;
int tmp=0; //標記postR這個元素在中序遍歷下的位置
for(tmp=inL ; tmp<=inR ; ++tmp)
if(IN[tmp]==root->data)
break;
int numleft=tmp-inL; //【思維】後序遍歷中,前numleft個數字都是後續根的左子樹
root->l=creat(postL, postL+numleft-1, inL, tmp-1); //【caution】這裡的下標千萬注意!!!
root->r=creat(postL+numleft , postR-1 , tmp+1 , inR); //寫這步的時候最好畫圖
return root; //返回根地址
}
void BFS(node* root)
{
queue<node*> q; //建立佇列
q.push(root);
int num=0; //記錄輸出個數,控制空格數量
while(!q.empty())
{
++num;
node* tmp=q.front();
q.pop();
printf("%d",tmp->data);
if(num<n)
printf(" ");
if(tmp->l!=NULL)
q.push(tmp->l);
if(tmp->r!=NULL)
q.push(tmp->r);
}
}
void DFS(node* root)
{
if(root==NULL)
return;
printf("%d ",root->data);
DFS(root->l);
DFS(root->r);
}
int main()
{
scanf("%d",&n);
for(int i=0 ; i<n ; ++i)
scanf("%d",&POST[i]);
for(int i=0 ; i<n ; ++i)
scanf("%d",&IN[i]);
node* root=creat(0,n-1,0,n-1);
//DFS(root); //先序遍歷,測試建樹情況
BFS(root);
return 0;
}
PAT:1020. Tree Traversals (25) AC
轉載於:https://www.cnblogs.com/Evence/p/4319614.html
相關文章
- Traversals of binary tree
- PAT甲級1110 Complete Binary Tree (25分)|C++實現C++
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍歷得到二叉搜尋樹的後序遍歷
- PAT 1033 To Fill or Not to Fill (25分) 貪心思想
- PAT (Advanced Level) Practice 1149 Dangerous Goods Packaging (25分)Go
- PAT甲級1122 Hamiltonian Cycle (25分)|C++實現C++
- PAT甲級1154 Vertex Coloring (25分)|C++實現C++
- 19年春季第二題 PAT甲級 1157 Anniversary(25 分)
- (非原創)PAT甲級1123 Is It a Complete AVL Tree (30分)|C++實現C++
- 2020年7月第2題 PAT甲級真題 The Judger (25分)
- PAT1040 Longest Symmetric String (25分) 中心擴充套件法+動態規劃套件動態規劃
- 新版ac_signature
- 2019年9月8日秋季PAT甲級題解-2-1161-Merging Linked Lists (25 分)
- PAT A1025 PAT Ranking(sort部分排名)
- PAT-B 1085 PAT單位排行【模擬】
- tree
- PAT A1101
- PAT A1041
- PAT A1054
- PAT 乙級
- 多少個PAT
- 傑裡之AC695AC696 的定時斷電記憶【篇】
- [複習] AC自動機
- ac79啟動流程
- AC自動機 提高篇
- Oracle ASM Cluster File Systems (ACOracleASM
- noi.ac 字串游戲字串
- DSU on Tree
- Rebuild TreeRebuild
- 01 Tree
- Tree Compass
- A - Distance in Tree
- Decision Tree
- PAT乙級1023
- 【PAT】4. 圖
- 【MySQL(1)| B-tree和B+tree】MySql
- AC自動機:Tire樹+KMPKMP
- AC-DMIS 5.3 曲面321找正