zoukankan      html  css  js  c++  java
  • 【PTA】最小堆

    【PTA】最小堆

    最小堆,是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于其左子节点和右子节点的值。

    也就是位于堆顶的元素是整棵完全二叉树中数据值最小的。

    操作

    将一棵完全二叉树转换成堆

    image-20211122074154340

    注意,在这种写法下,根节点的编号是0,对于任意一个结点,它的编号为x,其所对应的左儿子结点的编号为2*x+1,其所对应的右儿子结点编号为2*x+2

    其中外层循环i能够提取出每一个非叶子结点。

    而对于每一个非叶子结点我们是按照深度由大到小依类进行处理的。

    对于内层循环来讲,因为我们是要去将整个完全二叉树直接拿出来,并且将视野单独局限在一个由三个元素组成的小三角形中去,且要将这三个元素中最小的一个放置到这个小三角形的顶部。

    因而在第一步的时候我们可以先选择将两个儿子结点进行一个比较,但注意,位于底部右侧单独拎出来的那个小三角形,可能只具有一个儿子结点。

    因而我们需要先做一个判断,child+1<=N-1

    其次,如果A[child+1]<A[child],那么就对child进行一个加一操作,使得child代表A数组中元素最小的位置。

    而如果一旦A[child]比A[root]来得小的话,两者就会交换位置,也可以认为Tmp会下放到下一个三角形的顶部,而最终Tmp应该放到j停在的地方。

  • 相关阅读:
    自动化原理
    Appium 用途和特点
    接口测试
    测试环境部署
    总结一下,selenium 自动化流程如下
    Qt---tcp之网络通信
    java的接口与抽象类
    Leetcode---每日一题之56合并区间
    java与c++的正则表达式的小总结
    数据结构学习之线索二叉树(java/c++版)
  • 原文地址:https://www.cnblogs.com/BeautifulWater/p/15587057.html
Copyright © 2011-2022 走看看