目录
前言
堆排序是基于完全二叉树,堆是一种特殊的完全二叉树结构,那什么是树呢?
树是一种可以递归定义的数据结构,树是由n个节点构成的集合:
如果n=0,就是一颗空树;
如果n>0,那就存在一个节点作为树的根节点,其他节点可以分为m个集合,每个集合本身又是一棵树。
关于树的一些概念:
根节点:没有父节点的节点,如上图中A
节点的度:一个节点含有子树(孩子节点)的个数,,上图中F的度就是3(KLM)
树的度:一颗树中,各个节点的度里面取最大值,上图中,树的度为A节点的度,为7
树的高度或深度:就是树的层数,,上图中高度为4
叶子节点或终端节点:度为0的节点成为叶子节点,上图中叶子节点为HIPQ....
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点,E是I的父节点
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点,I是E的孩子节点
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推
森林:由m(m>=0)棵互不相交的树的集合称为森林
了解了什么是树,那什么是二叉树呢
二叉树:度不超过2的树,每个节点最多有两个孩子节点,两个孩子节点被区分为左孩子节点和右孩子节点
二叉树分类:
满二叉树:⼀个⼆叉树,如果每一个层的结点数都达到最⼤大值,则这个二叉树就是满二叉树。
完全二叉树:叶节点只能出现在最下层和次下层,并且最下⾯面一层的结点都集中在该层最左边的若⼲干位置的二叉树
二叉树的存贮方式:
链式存储方式
顺序查找方式
从图片中,我们发现:
父节点和左孩子节点的编号下标有什关系?
0-1 1-3 2-5 3-7 4-9(列表中的下标)
i → 2i+1
父节点和右孩子节点的编号下标有什么关系?
0-2 1-4 2-6 3-8 4-10(对应列表中的下标)
i → 2i+2
因此得到以下规律:
已知双亲的下标,则左孩子的下标为:Left=2parent+1,则右孩子的下标为:Right=2parent+2;
已知孩子结点(不区分左右)的下标,则双亲的下标为:(child-1)//2