题库 信息学奥赛题库 题目列表 (笛卡尔树)对于一个给定的两两不等的正整数序列,笛...
组合题

(笛卡尔树)对于一个给定的两两不等的正整数序列,笛卡尔树是这样的一棵二叉树:首先,它是一个最小堆,即除了根结点,

每个节点的权值都大于父节点的权值;其次,它的中序遍历恰好就是给定的序列。例如,对于序列 

7,2,12,1,10,5,15,3,下图就是一棵对应的笛卡尔树。现输入序列的规模 

n(1≤n<100) 和序列的 n 个元素,试求其对应的笛卡尔树的深度 

d(根节点深度为 1),以及有多少个叶子节点的深度为 d。

#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 题 填空
第 2 题 填空
第 3 题 填空
第 4 题 填空
题目信息
2011年 初赛
-
正确率
0
评论
49
点击