zoukankan      html  css  js  c++  java
  • 二叉树遍历理解

    这篇着重讲如何遍历二叉树,因为之前再次遇到二叉树时,发现前序遍历、中序遍历 、后序遍历,具体怎么找已经忘了。只剩下口诀:

    前序遍历:根结点 ---> 左子树 ---> 右子树

    中序遍历:左子树---> 根结点 ---> 右子树

    后序遍历:左子树 ---> 右子树 ---> 根结点

    层次遍历:仅仅需按层次遍历就可以

    时间久远,其实口诀也没记下(当时没够重视,外加使用少)。口诀记忆要点就是:

    二叉树的遍历,是从左到右的,前、中、后这三个字代表着根结点的位置(其实也是最终根结点的位置)。

    那么,再次看到前序遍历,“前”就代表根结点在前,然后从左到右,就是:根结点——左子树——右子树

     接下来,规则记住了,如何找呢?如下图:

    层次遍历就不详细讲解了,从上往下就ok了,结果是:abcdefghi

    前序遍历思考方式:根——左——右。a,然后是左子树b,但是b也有左子树,此时把b再当成根,下一步应该是根b-左d-右e。到这,我们确定了a-b,由于d还有子树,到达d时,我们要重新统计根d-左h-右i,由于 h、i没有子树,这一步我们的顺序扩大到:a-b-d-h-i,d的子树已遍历,这时继续走根b-左d-右e,所以顺序后添加e,以此类推,补完整个结构,最后结果为:a-b-d-h-i-e-c-f-g。

    中序遍历思考方式:左——根——右。此时起点是最左边的左子树h,左h-根d-右i,这个时候,我继续前序遍历的思考方式,得出的结果却是:h-d-b-a-i-e-f-c-g,而且中间逻辑有点诡异。这是为什么呢?急于获得答案,我先根据正确结果得结出一个规律:从上往下找,可以用前序的那种思维模式,每一步都是新起点,从下往上,是把它们这一部分作为一个整体,需要走完,才能往上找,如:d、h、i看成一个d点,d内的顺序(中序)是h-d-i,这时再把d当作左子树,继续遍历。按照规律,h-d-i(d点的内部顺序),d-b-e(b点的内部顺序),最后找出的顺序:h-d-i-b-e-a-f-c-g。

    后序遍历思考方式:左——右——根。结合中序得出的规律,把h-i-d看作d点的内部顺序,最后查找结果为:h-i-d-e-b-f-g-c-a。

    总规律:上到下,新起点。下到上,根为口。(这个口是接口,接口内的东西,自己有顺序,整个接口再和外面排序)

    好了,方法得出了,规律总结了。前序和中序、后序的思考方式为什么会不一样呢?表面上自然是,一个从上而下,一个从下往上......

    深层理论知识,还望大神们解答。

    决定,以后要多记下自己的思维模式......应该是百利而有一害(费时间),不过,多年后回头看,当年最多的应该就是时间了吧?

  • 相关阅读:
    投行风云:FO的酸甜苦辣【转】
    周末排毒
    LeetCode | Single Number II【转】
    Adding supplementary tables and figures in LaTeX【转】
    Algorithm | Tree traversal
    Leetcode | Linked List Cycle I && II
    Network | UDP checksum
    Ubuntu下将现有的文件打包成deb包
    Base64编码加密
    requestAnimationFrame 的原理与优势
  • 原文地址:https://www.cnblogs.com/shuanbi/p/8857582.html
Copyright © 2011-2022 走看看