PAT(甲级)2019年冬季考试 7-4 Cartesian Tree
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT(甲级)2019年冬季考试 7-4 Cartesian Tree相关的知识,希望对你有一定的参考价值。
这道题利用的是最小堆和中序排序的属性:只要知道根节点,就能得出哪些属于左子树,哪些属于右子树。
开始我一直报段错误,经过筛查,发现是创建树的函数忘记写返回语句 return root.
AC代码
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<cstring>
using namespace std;
const int maxn = 100;
const int SUP = 2000000000;
struct Node{
int data;
Node* lchild;
Node* rchild;
};
int n,A[100];
int getMin(int l,int r){
int min = SUP;
for(int i=l;i<=r;i++){
if(A[i]<min)min = A[i];
}
return min;
}
Node* create(int l,int r){
if(l>r)return NULL;
Node* root = new Node;
root->data = getMin(l,r);
int k;
for(k=l;k<=r;k++){
if(A[k] == root->data)break;
}
root->lchild = create(l,k-1);
root->rchild = create(k+1,r);
return root;
}
int hasp = 0;
void BFS(Node* root){
queue<Node*> Q;
Q.push(root);
while(!Q.empty()){
Node* top = Q.front();
Q.pop();
printf("%d",top->data);
hasp ++;
if(hasp<n)printf(" ");
if(top->lchild!=NULL)Q.push(top->lchild);
if(top->rchild!=NULL)Q.push(top->rchild);
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&A[i]);
}
Node* root = create(0,n-1);
BFS(root);
return 0;
}
结果
以上是关于PAT(甲级)2019年冬季考试 7-4 Cartesian Tree的主要内容,如果未能解决你的问题,请参考以下文章