组合题4 个小题
已作答 0 / 4
2.(笛卡尔树)对于一个给定的两两不等的正整数序列,笛卡尔树是这样的一棵二叉树:首先,它是一个最小堆,即除了根结点,每个节点的权值都大于父节点的权值;其次,它的中序遍历恰好就是给定的序列。例如,对于序列 7,2,12,1,10,5,15,3,下图就是一棵对应的笛卡尔树。现输入序列的规模 n(1≤n<100) 和序列的 n 个元素,试求其对应的笛卡尔树的深度 d(根节点深度为 1),以及有多少个叶子节点的深度为 d。
1#include<iostream>2using namespace std;3const int SIZE=100+5;4const int INFINITY=1000000;5int n,a[SIZE],maxDeep,num;6void solve(int left,int right,int deep)7{8int i,j,min;9 if(deep>maxDeep){10 maxDeep=deep;11 num=1;12 }13 else if(deep==maxDeep)14 ① ;15 min= INFINITY;16 for(i=left;i<=right;i++)17 if(min>a[i]){18 min=a[i];19 ② ;20 }21 if(left<j)22 ③ ;23 if(j<right)24 ④ ;25}26int main()27{28 int i;29 cin>>n;30 for(i=1;i<=n;i++)31 cin>>a[i];32 maxDeep=0;33 solve(1,n,1);34 cout<<maxDeep<<' '<<num<<endl;35 return 0;36}①处应填( )