• 数据结构与算法基础 模块二


    那么在上一次的分享中,针对链表和顺序表进行了比较,也对于他们二者进行了基础性的分析和说明,那么在模块二中,紧接着上一次的分享,说明一下栈,队列和树的相关知识。

      栈

       栈的关键主要是记住:先进后出   (可以形象的比喻为洗盘子,先洗的盘子放在最下面,放的时候一个一个放,最先洗完的最后放进碗橱)

       并且我们需要明确,栈只是一个逻辑上的概念,并非是实际存在的,并且,出栈的顺序是灵活的,并不是固定的一定是按照进来的顺序走,有可能是进一个出一个,也有可能是全部进来再出,所以,我们要明确不能死记栈的概念,而是要灵活的运用。

       队列

       队列的关键是:先进先出 (可以形象的比喻成在银行排队取钱,先进去的人排在队伍的前面,完成取钱任务后,先出门)

       队列和栈两者有一个很明显的区别,就是出的顺序,所以在记忆的时候,我们可以组合在一起记忆,并且将他们各自都形象的记忆,这样有利于我们区分两者之间的关系,也有利于我们记忆。

      那么,队列中还包括循环队列 :在判断循环队列空的条件:head=tail 这个式子也可以表示队满的情况, 但也有这种可能,就是他的尾指针并没有和他的头指针存在一个地址里,为了区分开来,头地址和尾地址之间还存在一个地址,即其队满的条件是:tail+1=head

       树

      首先,我们在说明树的一些问题的时候,我们需要明确有关于树的相关基本概念:

      1、节点的度 (就看与下一层与几个结点相关联)

      2、树的度 (所有节点中度最高的)

      3、叶子节点 (度为0的结点)

      4、分支结点 (除叶子结点以外其余的结点)

      5、内部结点 (分支结点除根节点外的结点)

      6、父节点

      7、子结点            (父节点,子节点,兄弟结点都是相对的量和概念,都是一个结点相对另一个结点而言的)

      8、兄弟节点 

        树的遍历

       前序遍历: 先访问根节点,再访问叶子结点

       后序遍历:先访问子结点,再访问根节点

       层次遍历:一层一层的访问

          那么,我们需要明白,每一次访问子结点的时候,都必须从左开始,先访问左子结点,再去访问右子结点

     二叉树

       在说有关二叉树的相关内容的时候,我们必须要区分开一个问题。就是二叉树他并不是一个特殊的树,而是一个独立的数据结构,并且,二叉树最多只能有两个子结点结点,左子结点和右子结点。

       二叉树可分为:满二叉树,完全二叉树和非完全二叉树

       明确二叉树的相关概念后我们来看一下二叉树的重要的特性:

      1、在二叉树的第i层上最多有2的i-1次个结点 (i>=1);

      2、深度为k的二叉树最多有2的k-1次个结点 (k>=1);

     3、对任何一颗二叉树,如果其叶子结点树为n0,度为2的结点数为n2,则n0=n2+1;

        注: 若一个完全二叉树有n层,则其n-1层就是满二叉树,最后一层排列也必须是从左至右排列 。 这个同时也是构成完全二叉树的条件。

    4、如果对于一颗有n个结点的完全二叉树的结点按层编号(从第一层到 log2n向下取整+1 层 ,每层都是从左到右),则对于任意结点i(1<=i<=n),有:

        ① 如果 2i>n,则结点i为叶子结点,无左子结点,否则右子结点是结点2i。

        ②如果2i+1>n,则结点i无右子结点,左子结点是2i+1;

      二叉树的遍历

      二叉树的遍历与树的遍历相同,但是多了一个中序遍历。其余三种遍历的条件和方向都一样,

       中序遍历:先访问左子结点,再访问根节点,最后访问右子结点。

      既然说了树和二叉树各自的内容,那么我们来看一下,树和二叉树之间是怎么转换的

       树和二叉树之间的转换需要符合以下的规则:一棵树若要转换成等价的二叉树,对于任何一个结点,树的孩子结点作为它转换成二叉树中的左子树结点,树的兄弟结点全部变成新转换之后的右子树结点。

      那么我们需要注意的是,在数转换成二叉树之后,他同样需要有遍历的操作,那么,在树正确转换之后, 

        1、两者的前序遍历相同

        2、树的后序遍历是二叉树的中序遍历

      查找二叉树

      查找二叉树又叫做二叉排序树,即一个查找二叉树要么是一颗空树,要么是满足以下递归条件:

     ①:查找树的左,右树各是一颗查找树

     ②:若查找二叉树的左子树排空,则其左子树的各结点值均小于根结点的值

     ③:若查找树的右子树排空,则其右子树的各结点值均大于根节点值。

       以上均为今天的分享,因为时间和分值的分布,只能系统的阐述一下各关系和内涵,所以,如果要有一个深层次的认识和了解的话,还是需要下面自己在多加找相关的练习题进行操作联系,加强自己的熟练程度的记忆。

      

     

  • 相关阅读:
    利用本地浏览器远程服务器上的jupyter notebook
    解决IIS服务器Web访问提示输入密码
    IIS 配置
    override new 关键字的区别
    ASP.NET的网站的设计与优化
    山东人!
    远程连接SQL Server 2000服务器的解决方案
    对软件的新认识
    一个程序员成长的六个阶段
    优秀程序员应当具备的品质
  • 原文地址:https://www.cnblogs.com/bibabo/p/9332969.html
Copyright © 2020-2023  润新知