洛谷 P2171 Hz吐泡泡

题目背景

Hz大大是一种可爱的动物(神)。他很喜欢吐泡泡(更喜欢写作业)。

题目描述

这天,Hz大大心血来潮,吐了n个不同的泡泡玩(保证没有重复的泡泡)。因为他还要写作业,所以他请你帮他把这些泡泡排序成树(左子树<=根<右子树)。输出它的后序遍历。

输入输出格式

输入格式:

 

共2行。

第一行,1个整数n。(1<=n<=300000)

第二行,n个数,代表泡泡的大小。

 

输出格式:

 

共2行。

第一行,输出树的深度。

第二行,输出数的后序遍历。

详见样例输出。

 

输入输出样例

输入样例#1: 复制
8
1 4 3 9 10 35 2 7
输出样例#1: 复制
deep=5
2
3
7
35
10
9
4
1

说明

水题一道。

思路:模拟堆

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
int n,cnt,deep,bns,root;
struct data{
    int ls,rs,val;
}tr[300007];
int max(int a,int b){
    if(a<b)    return b;
    else return a;
}
void insert(int& rt,int x){
    ++bns;
    if(!rt){ rt=++cnt;tr[rt].val=x;deep=max(deep,bns);return; }
    if(x>tr[rt].val)    insert(tr[rt].rs,x);
    else insert(tr[rt].ls,x);
    return;
}
void dfs(int rt){
    if(tr[rt].ls)    dfs(tr[rt].ls);
    if(tr[rt].rs)    dfs(tr[rt].rs);
    printf("%d\n",tr[rt].val);
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        bns=0;int x;
        scanf("%d",&x);
        insert(root,x);
    }
    printf("deep=%d\n",deep);
    dfs(root);
}

 

转载于:https://www.cnblogs.com/cangT-Tlan/p/7965438.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值