(笛卡尔树 )对于一个给定的两两不等的正整数序列, 笛

(笛卡尔树 )对于一个给定的两两不等的正整数序列, 笛卡尔树是这样的一棵二叉树。首先,它是一个最小堆,即 除了根结点外, 每个结点的权值都大于父结点的权值; 其次, 它的中序遍历恰好就是给定的序列。例如,对于序列 7、2 、12 、1、10 、5、15 、3 ,下图就是一棵对应的笛卡尔树。 现输入序列的规模 n(1<=n<100 ) 和序列的 n 个元素,试求对应的笛卡尔树的深度 d(根节点深度为 1),以及有多少个叶节 点的深度为 d 。 

QQ截图20210120141530.png

【程序清单】

#include <iostream>
using namespace std;
const int SIZE = 100+5;
const int INFINITY = 1000000;
int n, a[SIZE], maxDeep, num;
void solve(int left, int right, int deep){
    int i, j, min;
    if (deep > maxDeep) {
        maxDeep = deep;
        num = 1;
    }else if (deep == maxDeep)
        ①;
    min = INFINITY;
    for (i = left; i <= right; i++)
        if (min > a[i]) {
            min = a[i];
            ②;
        }
    if(left < j)③;
    if(j < right)④;
}
int main(){
    int i;
    cin>>n;
    for (i = 1; i <= n; i++)
        cin>>a[i];
    maxDeep = 0;
    solve(1, n, 1);
    cout<<maxDeep<<' '<<num<<endl;
    return 0;
}


答案
第1空:num++
第2空:j = i
第3空:solve(left, j – 1, deep + 1)
第4空:solve(j + 1, right, deep + 1)

题目信息

题号:6575
题型:填空题
难度:普通