二叉树的定义以及遍历

二叉树的定义以及遍历

      在学习过程中带着问题去思考,这样往往会达到事半功倍的效果。现在有这样一个问题:二叉树的前序遍历为EFHIGJK,中序遍历为HFIEJKG,按照后序遍历和层序遍历的结果是多少?

      为了解决这个问题,我们先看下什么是二叉树以及二叉树是如何遍历的?

     一、什么是二叉树

     1. 定义

     简单理解下:

     1)本身是有序树;

     2)树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2

     2. 二叉树的类型

          2.1 满二叉树

          如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树。

            

         2.2 完全二叉树

     如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。

               

      2.3  非完全二叉树

      如下图:由于最后一层的节点没有按照从左向右分布,因此只能算作是普通的二叉树。

                    

    二.   二叉树的遍历

     1.  几个相关概念
    二叉树的遍历涉及到两个关键点:访问和次序

    :二叉树中,节点的度指的是节点拥有的子树的数目。而整棵树的度指的是树中结点的最大的度。

    根节点:二叉树只有一个根节点,树最顶端的节点就是根节点

    分支节点:也称为非终端节点,度不为零的节点称为非终端节点
    叶子节点:也称为终端节点,没有子树的节点或者度为零的节点

    2.   遍历

    2.1  前序遍历
   顺序是:根左右(根在最前面),考察到一个分支节点,即刻输出该节点的值,并继续遍历其左右子树

   说明:每一层都要按照分支节点在前面位置来进行遍历

    2.2   中序遍历
    顺序是: 左根右(根在中间),考察到一个分支节点,将其暂存,遍历完左子树后,再输出该节点的值,然后遍历右子树

    说明:按照分支节点在中间位置来进行遍历

    2.3  后序遍历

    顺序是: 左右根(根在最后面),考察到一个分支节点,将其暂存,遍历完左右子树后,再输出该节点的值。

   说明:按照分支节点在后面位置来进行遍历

    2.4  层序遍历
   这种遍历方式比较简单:从上往下,从左到右

   说明:上面几种遍历方式中,这个根指的是每一层遍历时的分支节点,当然根节点只有一个,根据先序、中序、后序来放置在最前面、中间、最后面

 

    现在我们再来看下:
    1)由前序遍历结果EFHIGJK,可以得出 是根节点

    2)由中序遍历结果HFIEJKG,可以得出HFI是左子树的节点,JKG是右子树的节点

    3)我们再来看前序遍历结果EFHIGJK,由第2点的分析,将其进行分割为 E,FHI,GJK

    4)由前序遍历的特点是根左右,那么可以得出 G 是第二层的根节点

     5)分析左子树:

     根左右:FHI

     左根右:HFI

    可以得出 是F下一层的左边子节点,I 是F下一层的右边子节点

              

 

     6) 分析右子树:

    根左右:GJK
    左根右:JKG

    由于前面已经推导出 G 是根节点,由中序遍历结果:JKG,可得知 G的右边是没有子节点的,JK 作为一个整体在G的左边,再由前序遍历结果:GJK,可推导出 J 是G的左边子节点。

    由中序遍历结果:JKG,J是分支节点,那么根据左根右的特点,可得知 G的左边是没有子节点的,进而推导出 K是 J 的右边子节点。

           

 

       推导完毕,现在我们可以得出

       后序遍历的结果为: HIFKJGE

       层序遍历的结果为: EFGHIJK


       说明:因为二叉树的遍历是根据根节点的位置遍历的,因此推导过程中,我们是先判断出根/分支节点的问题,然后再去推导其他节点的位置,

posted @ 2022-11-15 17:37  欢乐豆123  阅读(287)  评论(0编辑  收藏  举报