小学生图解排序算法:⑦堆排序

很多朋友看到堆排序时,很可能是从冒泡等各种排序算法一路看过来的,其对于堆这种数据结构并无概念。因此我们先对堆及相关数据结构的概念做个基本介绍。

二叉堆是一种完全二叉树。树又是怎样的数据结构?之前,我们接触的常用数据结构如链表、栈、队列等,都是线性结构的,也就是一个节点的左右最多只有一个节点,故而在某些场景中,它们的使用效率太低。而树则不同,它的每个节点可以有N个节点。(注意:没有任何一种数据结构能通用所有场景,在不同场景中各种数据结构有不同的优劣势)

树是包含n个节点的有空合集,n>0。先看一张树的例图。

树

根据上图,我们来理一理树的一些概念:
1. 每个节点有0至多个子节点;
2. 每个子节点只有一个父节点;
3. 没有父节点的节点称之为根节点,或者树根;
4. 没有子节点(或说子节点为0个)的节点称之为叶节点;
5. 节点的度:即节点的宽度(分支数量),指节点含有几个子节点,如节点12的度为2,节点15的度为3;
6. 树的度:即树的最大宽度,以最大度节点的度为准,如上图中节点20的度最大,所以整个树的度为4;
7. 树的高度: 即从树根开始到叶节点的最长路径(层次),如上图中树的高度为4(路径15-20-13-36或15-20-13-19);
8. 子树:由每个节点及其下面的子节点、孙节点、叶节点等所有节点组成。如子树20的高度为3,子树13的高度为2。
9. 多叉树:每个节点最多有N个子节点(宽度、分支为N),称之为N叉树。如上图可称为4叉树。同理,二叉树即为所有节点最多只有2个子节点的树(子节点范围为0、1、2个)。


根据树的不同特征,有一些比较特殊的树,下面做个简单的介绍。

满二叉树与完全二叉树

满二叉树

除了最后一层,其余层次的所有节点都有2个子节点。
其叶节点全部在最后一层,上面层次不存在叶节点。

完全二叉树

特性1:除了最后一层与其上一层,其余层次的所有节点都有2个子节点
特性2:最后一层的叶节点从左向右紧密相连排列,中间不能有空缺。

开篇即说二叉堆是一种完全二叉树,所以请注意它的特性,下文会用到。

上图中,右侧那个不是完全二叉树,因为最后一层的叶节点不是从左向右紧密相连,中间有空缺。

可以发现,满二叉树满足完全二叉树的特征,因此它也算一种特殊的完全二叉树。


二叉搜索树

二叉搜索树/BST树

仅作了解,与堆排序无关。

对任意一个父节点,其左支所有节点都比它的值小,其右支所有节点都比它的值大,这样特征的二叉树被称为二叉搜索树(BST树)。

上图左侧为一个二叉搜索树,而右侧不是,因为10的右支中出现了比它小的节点,而按照定义,任意一个节点,其右支的所有节点都必须比它大。

要在二叉搜索树中检索某个值,先从根节点开始比对,如该值小,说明该值不可能出现在右支,因此往左支继续比对;如该值大,则往右支节点比对下去……如此循环比对下去。


平衡二叉树/AVL树

平衡二叉树/AVL树

仅作了解,与堆排序无关。

对于整个树及任意一个子树,其左支高度与右支高度相差不超过1,则称之为平衡二叉树(AVL树)。

上图中,左侧为AVL树,而右侧不是。因为虽然对于子树20来说,其左支高度为1,右支高度为3(从子树根节点20算起),高度相差为2,不符合AVL树的定义。


二叉堆

上文对树做了简单的概念介绍,对我们理解堆排序有很

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值