算法

    1. 概念
    2. 创建堆
  • 前缀树
  • 概念

    堆是任意节点值满足大于等于(大根堆)或小于等于(小根堆)左右子节点值的完全二叉树

    img

    创建堆

    堆的数组表示:可以用序号 1 ~ k 表示 k 个节点,如有一个节点序号为 k,那么父节点必定是 k/2 (取整),左子节点和右子节点分别为 2k 和 2k + 1 (也可以从 0 ~ k - 1 表示 k 个节点)

    堆的操作方式:

    • 插入(上移):从下往上,节点插入堆尾,然后调整:比父节点大就交换位置(大根堆),重复调整直到不需要调整或者到根节点

    • 弹出(下移):从上往下,取出堆顶,最后一个节点移动到堆顶,然后从上往下调整堆,直到不需要调整或者到根节点

    创建堆的方式有:

    • 插入式创建
      • 从前往后,从下往上:新建新的堆数组,对于需要排序的堆数组从前往后遍历节点,每一次把新的节点插入新的堆数组堆尾,然后调整:比父节点大就交换位置(大根堆),重复调整直到不需要调整或者到根节点
    • 原地创建(堆化)
      • 从前往后,从下往上:对于堆数组从前往后遍历节点,每一次跟上层的父节点进行对比,然后调整:比父节点大就交换位置(大根堆),重复调整直到不需要调整或者到根节点
      • 从后往前,从上往下:对于堆数组从后往前遍历非叶子节点,每一次对比左右节点,然后调整:有一方比父节点大就交换位置(大根堆),重复调整直到不需要调整或到末尾节点

    这两种创建方式的区别在于:一个是在新数组上创建堆,一个是在原来数组创建堆

    参考:

    前缀树

    Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段:

    • 指向子节点的指针数组 children。
    • 布尔字段 isEnd,表示该节点是否为字符串的结尾。

    要点:

    • 如果是哈希数组表示,children = [ ] 中,index 包含了字母的 ASCII 码信息,和一般的树节点有 val 不一样
    • 叶子节点指向空节点,和一般树叶子节点值向 null 不一样

    参考:

    力扣


    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1249118795@qq.com