python算法+数据结构——堆排序(1)相关基础知识

在介绍这种算法前,我先向大家介绍一些基础知识。

树与二叉树

在这里插入图片描述

是一种可以递归定义的数据结构,比如目录结构。
树是由n个节点组成的集合:
1.如果n=0,那么这是一颗空树。
2.如果n>0,那存在1个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。

一些概念:
1.根节点、叶子节点:A、D、E、F、G、J下还有分支那么它们就是根节点;B、C、H、I、K、L、M、N、P、Q它们下面没有分支,那么他们就是叶子节点
2.树的高度(深度):指的是整棵树有几层,向图中有4层,树的高度就是4;
3.树的度:E这个节点树的度是2,因为E下面有两个分叉,树的度是整个树中最大分叉数,图中最大分叉是A下分叉数,有6个
4.孩子节点/父节点:这棵树就像是一个家族的族谱,A是B,C,D,E,F,G的父节点,B,C,D,E,F,G是A的子节点(孩子节点);D是H的zi父节点,H是D的子节点(孩子节点)。
5.子树:图中的整个大树中的分支,像E包括它下面的I,J,P,Q共同是A的子树

**

二叉树

:度不超过2的树(每个分叉最多为2,如图)
在这里插入图片描述
每个节点最多有两个孩子节点
两个孩子节点被区分为左孩子节点和右孩子节点(像A下的B是左孩子节点,C是右孩子节点)

接下来介绍两个特殊形式的二叉树
满二叉树:一个二叉树,如果每一个层的节点数都达到最大值(2),则这个二叉树就是满二叉树。
完全二叉树:叶节点只能出现在最下层和次下层并且最下面一层的节点都集中在该层最左边的若干位置的二叉树。
在这里插入图片描述
图a:满二叉树(每一个层的节点数都达到最大值(2))
图b:完全二叉树,叶子节点在最下层和次下层(次下层叶子节点为7,最下层叶子节点为8,9,10,11,12;并且最下面一层的节点都集中在该层最左边的若干位置,像6下的度没有满只有12,但是12是6的左孩子节点,如果12在右边,那么这个树就不是完全二叉树了)
图c:既不是满二叉树(像3,4下的节点数都没满)也不是完全二叉树(最下面一层的节点没有集中在该层最左边)
图d:非完全二叉树(如果6在3的左孩子节点处这个树就是完全二叉树了)

二叉树的存储方式

链式储存方式;
顺序储存方式(简单来说就是用列表储存二叉树);
咱们先介绍二叉树顺序储存方式
在这里插入图片描述

上面这个树,利用列表按从上到下,从左到右进行储存[9,8,7,6,5,0,1,2,4,3],那么疑问来了,利用列表储存之后我们怎么知道谁是父节点、孩子节点、左节点、右节点呢?
列表按从上到下,从左到右进行储存后,每个数字都对应一个下标,9-0、8-1、7-2等等。
按下标看:
父节点和左孩子节点的编号下标的关系:
9下标0的左孩子节点是8下标1,下标0-1
8下标1的左孩子节点是6下标3,下标1-3
7下标2的左孩子节点是0下标5,下标2-5
找出规律:父节点和左孩子节点的编号下标有父节点为i则左孩子节点为2i+1
父节点和右孩子节点的编号下标的关系:
9下标0的右孩子节点是7下标2,下标0-2
8下标1的右孩子节点是5下标4,下标1-4
7下标2的右孩子节点是1下标6,下标2-6
找出规律:父节点和右孩子节点的编号下标有父节点为i则左孩子节点为2i+2
孩子节点为i父节点为 (i-1)//2 (左右都是)
接下来咱们开始正式介绍堆排序(下一篇):堆排序(2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2019.09.04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值