zoukankan      html  css  js  c++  java
  • 如何遍历二叉树

    之前一直说有道题目要用到二叉树的定义以及遍历,所以一直都没写,这次先来说说二叉树的遍历。

    对于二叉树的定义,以及二叉树的一些性质,在这里我就不多说了。

    这次主要是说说怎么样去遍历一颗二叉树。

    这里一共给出4种遍历的方式,然后给出思路,具体代码就不编写了,因为对于二叉树来说,不同的方式存放,代码差距还是很大的,所以理解思路就好。

    1、前序遍历。

    首先访问根节点,然后前序遍历左子树,再前序遍历右子树,遇到空就返回。

    解释一下,在学习树的时候其实很多的时候会用到递归的思想,因为树本身的定义就是递归的。

    这里的遍历的思想也是一样,也是递归的。

    举个例子说明一下,一下几个遍历的思路参考这个例子的模型

    首先来颗树

          1

       2     3

    4  5  6  7

    这棵树来说,先访问根节点1

    然后前序遍历左子树,先访问根节点2

    然后前序遍历左子树,先访问根节点4

    然后前序遍历左子树,返回空

    前序遍历右子树,返回空

    前序遍历右子树,先访问根节点5

    然后前序遍历左子树,返回空

    前序遍历右子树,返回空

    。。。。。依次下去,最后访问的过程为1245367

    下面的遍历我就不多说明了,直接看最后遍历的结果吧。

    2、中序遍历

    先中序遍历左子树,再访问根节点,最后中序遍历右子树,遇到null返回

    访问过程为4251637

    3、后序遍历

    先后序遍历左子树,在后序遍历右子树,最后访问根节点,遇到null返回

    访问过程为4526731

    4、层序遍历

    按照层级结构,在访问第一层,再访问第二层,每一层从左往右一次访问

    访问过程为1234567

    我暂时只是列举出这几种遍历的方式,至于什么时候用到了,哪一种遍历方式适合当下的题目或者环境,这还有待思考和学习。

    然后是对于遍历的转换,如果给出一长串数,说这是用中序遍历的结果,然后让你还原出那颗树,我觉得只要能懂原理的话,就不难了。

    至于代码上的实现,基本上都是用递归来实现的,根据定义很容易给出,所以就不多写了。

  • 相关阅读:
    Zuul转发请求时HttpHostConnectException can't cast to ZuulException问题解决方法
    mysql循环插入千万级数据
    ssh登录原理及免密登录配置
    mysql binlog抽取某个表的数据
    ssh方式请求gitlab需要密码解决方法
    linux使用shell脚本停止java进程
    centos7安装docker-ce
    FutureTask详解
    Boolean.getBoolean用法
    mysql对emoji的支持
  • 原文地址:https://www.cnblogs.com/linkstar/p/5677467.html
Copyright © 2011-2022 走看看