博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从树到堆(一)【数据结构】
阅读量:4166 次
发布时间:2019-05-26

本文共 1749 字,大约阅读时间需要 5 分钟。

一、引入

    我们认识的线性结构中,每个结点至多有一个后继结点,而树形结构可以有一个或多个树形后继结点,也就是说树形结构可以用来表示更为复杂的数据。我们看到他有的时候回提问题,树形结构计算机要如何存储呢?其实我们对他并不陌生,例如我们计算机的目录就可以通过这个结构给显示出来:

这里写图片描述


二、二叉树

    我想不论是一般树还是森林,我们都可以先通过学习二叉树,进而找到他们共同与不同的地方,类比的进行。

  • What
    我们每个人现在心里给他一个定义,官方的定义是由一个根及两颗互不相容的左子树和右子树组成,其中左子树和右子树也均为二叉树。
  • 好处
    二叉树的使用,很好的体现了分治的思想,我们研究它的时候可以从它的左后孩子入手一分为二,研究孩子二叉树的时候也是一分为二,便利了很多。

2.1 性质

    如果二叉树的深度为h,方便我们后续的使用;同时这里也说明一下我们常常混淆的满二叉树,完全二叉树和非完全二叉树都说明一下。

  • 当深度为h

    二叉树每层排满了最多有2^(h-1)个;二叉树所有结点最多有2^h-1个,其实这个来源是等比数列,每层的相加: 20+21+22+... +2^(h-1)等比数列的求和很容易得出所有结点的个数;同时对于任意一个二叉树,度为0的节点的个数比度为2的节点的个数多一个,即: n0=n2+1; 我们也很容易得出,最初只有一个节点是,度为0的个数为1,之后每增加一个度为2的节点,相对会增加一个度为0的节点。

  • 完全二叉树

    知道完全二叉树的前提是了解满二叉树,从定义理解,满二叉树即为根节点都有两个左右孩子节点,如下图:

    这里写图片描述

    这样的话,我们理解完全二叉树就很容易了。完全二叉树是在满二叉树的基础上,删除最后一层的节点,并且删除的这些节点是连续的同时包含最大编号的节点。例如:

    这里写图片描述

    但是这样的,没有包含最大的编号,显然不是完全二叉树,同时也没有连续,也不符合完全二叉树的特性了:

    这里写图片描述

2.2 遍历

    二叉树的遍历,按照根节点的位置可以分为先序、中序、后序遍历;按照层次亦可以进行层次遍历,由上至下,从左到右。

  • 根节点的位置

    按照根节点的位置进行遍历,其中的思想有递归的体现,为什么这样说呢?比如说我们按照先序的方式访问一个二叉树,即为根左右的方式,当访问 完根节点访问做孩子时,左孩子也是一个二叉树,同样我们也要按照先序的方式进行遍历,也就是说我们访问孩子节点时,需要访问孩子节点时,需要先访问孩子的孩子才可以,同时也有点先进后出的意思,跟我们栈的思想又很相像,慢慢的返现好多知识都是相通的~我们举个中序(左根右)遍历例子,如下图我们用箭头表示行走的路线,当访问这个节点时我们用星号标记一下:从图中可以看出,最开始走到8才开始第一个访问8,最终的遍历顺序是:8,4,5,2,10,5,1,6,13,3,7,15

    这里写图片描述

  • 层序遍历

    二叉树的层序遍历相对而言简单一些,按照从上到下,由左至右的顺序遍历,这里他的遍历和队列很相似,例如这样一颗简单的二叉树他的层序遍历结果是:1,2,3,4,5,6,7

    这里写图片描述

    这里我们可以结合队列说一下,我们设置一个队列Q,用来存放二叉树的节点,首先我们将根节点放入队列当中:

    这里写图片描述

    我们从队列中拿出根节点访问,并将该节点(如果有孩子节点的话)的孩子节点放入队列中,如果没有孩子孩子节点我们直接从队列中拿出该节点访问,不用插入孩子节点了,访问完,再继续访问下一个节点;例如我们拿出1节点访问,将1节点的孩子节点(从左至右)放入队列中:

    这里写图片描述

    同理不做解释我们将2节点从队列中取出,访问2,并将孩子节点放入对列中:

    这里写图片描述

    同理不做解释我们将3节点从队列中取出,访问3,并将孩子节点放入对列中:

    这里写图片描述

    接下来我们从队列中取出4访问,他没有孩子节点,没有元素入队了,我们继续取出5访问,同理一次将队列取完了。在这个过程中,队列中存的元素最多的时候有几个呢?他们又是什么元素?我想这一定是数据结构考试中常问的的问题,这里给大家解答了。通过以上我们将层序遍历很好的和队列结合了一下子~

2.3 存储结构

        二叉树的存储结构主要有顺序存储和链式存储,由于时间的缘故这里就不和大家展开说明了,感兴趣的TX可以自行研究一下~


三、吐槽

      题目不是从树到堆吗?谁能告诉我堆在哪里,亲们莫要吐槽,欲知后续,请看下集分享~小编已深陷数据结构的泥潭,无法自拔~

你可能感兴趣的文章
AIOPS案例学习-阿里巴巴构建通用智能运维平台
查看>>
bobo老师机器学习笔记-第四课:KNN算法
查看>>
Bobo老师机器学习笔记-数据归一化
查看>>
Bobo老师机器学习笔记第五课-简单线性回归
查看>>
Bobo老师机器学习笔记第五课-线性回归算法的评估指标
查看>>
简单线性回归-最小二乘法推导过程
查看>>
Bobo老师机器学习笔记第五课-多元线性回归
查看>>
Bobo老师机器学习笔记第六课-梯度下降法
查看>>
Bobo老师机器学习笔记第六课-梯度下降法在线性回归中的应用
查看>>
Bobo老师机器学习笔记第六课-调试梯度下降法
查看>>
Bobo老师机器学习笔记第七课-主成分分析法
查看>>
为什么我会要创建西安AIOPS学习群?
查看>>
Bobo老师机器学习笔记第七课-如何求得前N个主成分
查看>>
Bobo老师机器学习笔记第七课-如何通过PCA实现高维数据向低维数据的转换
查看>>
【工作经验】如何在IT外包公司快速成长?
查看>>
Bobo老师机器学习笔记第七课-sklearn中PCA的用法
查看>>
Bobo老师机器学习笔记第七课-使用PCA对MNIST数据集进行降噪
查看>>
Bobo老师机器学习笔记第七课-PCA在人工智能领域应用-特征脸
查看>>
Bobo老师机器学习笔记第八课-多项式回归
查看>>
Bobo老师机器学习笔记第八课-如何防止过拟合和欠拟合?
查看>>