算法学习笔记【day3】

原视频

发现一个数据结构讲挺好的数据结构与算法教程

二叉树

  1. 如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。
    算法学习笔记【day3】_第1张图片
  2. 如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。

算法学习笔记【day3】_第2张图片

  1. 任意节点的父节点的索引为(n-1)/2; 任意节点左孩子为2n + 1;右节点为2n + 2;(这个不用记啊,这个回头画个图,把索引标上,现找规律就行,记住这玩意儿有规律就行

把上图二叉树节点当成数组索引,其实数组就是一个完全二叉树,比如: 算法学习笔记【day3】_第3张图片 而这个完全二叉树就是堆
  1. 大根堆:任意节点大于所有其子节点的堆 为大根堆;反之为小根堆
  2. 构建大根堆(heapInsert):一个个把值放到堆末尾,比较他和他父亲,谁大谁在上面,重复此过程
  3. 顶部值是任意值,下面为堆进行重排(heapify):向下根自己两个节点的最大值比较小就换下去,重复此过程
  4. 堆中间值被修改: 如果改小了往下进行heapify 改大了网上进行heapInsert

堆排序

思路: 先将数组转成大根堆(heapInsert)每次把大根堆的顶点pop出去,把堆的最小点移到头上,进行heapify

源代码

引申阅读

数据结构:堆(Heap)

你可能感兴趣的:(算法)