PAT A1099 Build A Binary Search Tree (30分)(二叉搜尋樹中序遍歷有序)
阿新 • • 發佈:2020-09-12
思路
因為是二叉搜尋樹,所以樹的中序遍歷是從小到大排序的一組數
所以將位子中序遍歷儲存後,將已經排序過後的數一一對應即可找到位置
最後再層序遍歷輸出結點的值即可
這裡使用輸出儲存樹的結點,結點的結構體為值、位置、左右孩子的位置
#include<cstdio> #include<queue> #include<algorithm> using namespace std; const int N = 110; struct node{ int value; int left = -1; int right = -1; }Node[N]; int n; int num[N],layer[N]; int index = 0; void inorder(int root){ if(root==-1) return; inorder(Node[root].left); Node[root].value = num[index++]; inorder(Node[root].right); return; } void layerorder(int root){ index = 0; queue<int> q; if(root!=-1) q.push(root); while(q.empty()==false){ int front = q.front(); q.pop(); if(Node[front].left!=-1) q.push(Node[front].left); if(Node[front].right!=-1) q.push(Node[front].right); layer[index++] = Node[front].value; } return; } int main(){ scanf("%d",&n); for(int i = 0;i<n;i++){ int l,r; scanf("%d %d",&l,&r); Node[i].left = l; Node[i].right = r; } for(int i = 0;i<n;i++){ scanf("%d",&num[i]); } sort(num,num+n); inorder(0); layerorder(0); for(int i = 0;i<n;i++){ printf("%d",layer[i]); if(i!=n-1) printf(" "); } return 0; }