经典排序算法——堆排序超详解及其衍生问题(通俗易懂)

提示1:本篇使用Python实现算法代码

一、堆的前备知识

(一)树、二叉树介绍

1.树

树是一种数据结构,那么什么是树结构呢?

        树结构好比你电脑的文件目录结构,其底层就是树结构的层级关系。

        树也是一种可以递归定义的数据结构,树是由n个节点组成的集合:如果n=0,那这是一颗空树;如果n>0,那么存在一个节点作为树的根节点(下一段有介绍),其他节点可以分为m个集合,每个集合本身又是一颗树。为了能够理解这句话,我给出下面一张树的图,如图我们看,如果n=0,那么这棵树没有任何节点,则是一颗空树,如果n>0则A就是这整棵树的根节点,而诸如B、C、D、E等等,其余下部分本身又都是一棵树(如图二给出的部分示例)。

图一

图二 

怎么看待树结构呢?

        简单来说,树就是由许多个节点连接组成,且有相应的层级关系,类似于族谱,在最上面的“祖宗”我们称他为根节点,但在树结构中没有爷爷或者其他一说,节点和节点之间的关系只有父节点子节点。这里我给出下面这张图,如图R是根节点,而a,b,c都是R的子节点,那么R就是a、b、c的父节点,同样的以下节点都有相应的相互关系。

        接下来介绍关于树的几个概念:

        叶子节点,为了能够更好的理解叶子节点,我们不如将图三中的树倒过来看,就像一颗树,树的最顶端最上面才是叶子,那么在树结构中也是同样的道理,最顶端的节点就是叶子节点,下图中的j、k、e、f、g、m、n、i均为叶子节点

        树的深度(高度):很显然,树的深度就是树的层数,如下图树的深度为4。

        树的度:在介绍树的度之前我想先介绍一下节点的度,什么是节点的度,简单来说就是这个节点有多少个子节点,例如图中的R有三个子节点,那么他的度为3,以此类推。那么什么是树的度呢,树的度就是这整颗树中所有节点中最大的那个度,下图中该树的度为3,因为R节点和c节点的度都为3且最大。

        子树:关于子树,上面的图二中有很多示例,很简单,把根节点R看成树的下半部分,从他的子节点开始当做树的树枝部分,你每掰下一串树枝都可以成为这棵树的子树。

图三

2.二叉树        

二叉树基本介绍:

1.二叉树为度不超过2的树

2.树的每个节点最多有两个子节点(根据上面树的介绍其实和第一点是一个道理)

3.两个子节点被区分为左子结点和右子节点

        了解完二叉树的基本性质之后,完成堆排序我们需要了解以下几种二叉树:

        第一种:满二叉树,一个二叉树,如果每一层的节点数都达到最大值,则这个二叉树就是满二叉树。

图四 满二叉树

        第二种:完全二叉树,叶子节点只能出现在最下层和次下层,并且最下层的节点都集中在该层最左边的若干位置的二叉树。

图五 完全二叉树

        第三种:非完全二叉树,根据完全二叉树的定义,不满足其定义的二叉树就是非完全二叉树,如下图中的二叉树均不是完全二叉树,因为其某些叶子节点不在该层的最左边位置。

图六 非完全二叉树

        若还不能理解,下面给出一篇优秀博客,详尽的介绍了树以及二叉树的相关概念。

树、二叉树、完全二叉树、满二叉树的概念和性质-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_57675461/article/details/121323091

        3.练习

        给出下面几张树的图片,请判断其为什么二叉树(结尾附答案)

图七 某树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值