zoukankan      html  css  js  c++  java
  • 二叉树的创建和遍历

    二叉树的创建和遍历

    1. 二叉树的创建

    二叉树的创建是让我有点头疼的东西,因为我确实不太明白,但是让我写我却能较好的表达出来。

    现在来试试如何创建一个二叉树

    这是一个完全二叉树,其输入数组表达出来是这样的

    [1,2,4,0,0,5,0,0,3,6,0,0,7,0,0]

    其中0表示没有指向数值。所以这就是一个二叉树创建的样子

    这个二叉树的创建的从左到右建立的,首先先确定头节点 1 然后确定1的左孩子2,这时候大家注意!!!并不是继续确定1的右孩子3而是确定2的左孩子4,从数组前三位,确定的是二叉树的头节点,头节点的左孩子(简称为2),2的左孩子4。然后数组第4、5位两个0,第一个是确定4的左孩子为空,那么意味着4没有左孩子,然后继续看4的右孩子,也就是数组第5位也是0,那么意味着4没有右孩子。所以4的这一节点结束了。

    然后返回去看节点2,2的左孩子已经确定为4,在4没有左右孩子的情况下,数组第六位,也就是5为2的右孩子。那么数组中第七八位的两个零就意味着5没有孩子,5结束。

    然后继续返回去,看头节点此时的右孩子还没有确定,然后数组第九位3就是为头节点的右孩子,然后确定3的左孩子,也就是6,然后6后面两个零也就是说6没有孩子。

    然后返回去确定3的右孩子,就是7,然后两个0确定7没有孩子。二叉树建立完成。

    那么如下图的二叉树数组如何表示呢?

     

    也很简单,并不是很难。

    如下:[A,B,0,D,0,0,C,E,0,0,0]

    按如上思路思考一下,就能写出来。建立基本都是这么建立的。

     

    1. 二叉树的遍历

    在遍历这个颗树之前,先在看看每个节点是怎么样的,在每个节点这个结构之中有三个东西,自身的值,指向左孩子的指针(java中的话就不是指针,是new一个节点),指向右孩子的指针。

    图一七个节点,如下(表示[自身的值,左孩子,右孩子]):

    1) [1,->2,->3]

    2) [2,->4,->5]

    3) [3,->6,->7]

    4) [4,->0,->0]

    5) [5,->0,->0]

    6) [6,->0,->0]

    7) [7,->0,->0]

     

    1) 先序遍历

    以第一个图为例:先序遍历顺序为:[1,2,4,5,3,6,7]

    以第二个图为例:先序遍历顺序为:[A,B,D,C,E]

     

    所谓先序是指最先输出自己的值,然后走左孩子路线,再走右孩子路线。

     

    就以图一为例:节点一先输出自己的值,然后走左孩子路线,节点二输出自己的值,再接着走左孩子路线,节点四输出自己的值,然后节点四没有左右孩子,回去节点二,然后走节点二的右孩子路线,节点五输出自己的值,节点五没有左右孩子,回去节点二,节点二自己的值和左右孩子的值都输出完了,回去节点一,节点一输出完左孩子,走节点一的右孩子路线,到了节点三,节点三输出自己的值,节点三走自己的左孩子路线,节点六输出自己的值,节点六没有左右孩子,回到节点三,节点三再走自己的右孩子路线,节点七输出自己的值,节点七没有左右孩子,回到节点三,节点三自己的值和左右孩子都走完了,回到节点一。节点一自己的值和左右孩子都走完了,结束遍历!

     

    2) 中序遍历

    以第一个图为例:中序遍历顺序为:[4,2,5,1,6,3,7]

    以第二个图为例:先序遍历顺序为:[B,D,A,E,C]

     

    所谓中序是指最先走左孩子路线,然后输出自己的值,再走右孩子路线。

     

    从节点一开始,先走节点一的左孩子,到节点二。到节点二先走节点二的左孩子,到节点四。节点四没有左孩子,输出节点四自身的值,然后节点四没有右孩子,回到节点二。节点二左孩子走完课,输出节点二自身的值,然后走节点二右孩子路线。节点五没有左孩子,节点五输出自己的值,节点五没有右孩子,回到节点二,节点二遍历完了,回到节点一。节点一左孩子走完了,输出自己的值,走右孩子路线,到节点三。节点三有左孩子,到节点六。节点六没有左孩子,输出自己的值,节点六没有右孩子,回到节点三。节点三左孩子走完了,输出自己的值,走右孩子到节点七。节点七没有左孩子,输出自己的值,节点七没有右孩子,回到节点三,节点三遍历完了,回到节点一。节点一遍历完了。结束遍历!

     

    3) 后序遍历

    以第一个图为例:后序遍历顺序为:[4,5,2,6,7,3,1]

    以第二个图为例:先序遍历顺序为:[D,B,E,C,A]

     

    所谓后序是指最先走左孩子路线,再走右孩子路线,然后输出自己的值。

     

    从节点一开始,先走节点一的左孩子,到节点二。到节点二先走节点二的左孩子,到节点四。节点四没有左右孩子,输出节点四自身的值,节点四遍历完成,回到节点二。节点二左孩子走完,走右孩子路线,到节点五,节点五没有左右孩子,输出节点五的值,回到节点二。节点二左右孩子走完,输出节点二自己的值。节点二遍历完成,回到节点一。开始走节点一右孩子路线,到节点三,节点三有左孩子节点六,到节点六。节点六没有左右孩子,输出节点六自己的值。节点六遍历完成回到节点三,节点三有右孩子,到节点七。节点七没有左右孩子,输出节点七自己的值,节点七遍历完成,回到节点三。节点三左右孩子遍历完成,输出节点三自己的值,节点三遍历完成,回到节点一。节点一左右孩子遍历完成,输出节点一的值。遍历完成!

     

    1. 总结

    生成和遍历二叉树并不是什么特别困难的事情,但是对于初学者而言,却做不到如何用编程语言实现二叉树,原因很简单,其中会用到递归思想,对代码的掌握程度。所有的大神都是从菜鸟过来的,没有谁一蹴而就。对于初学编程者而言,要知道我们是幸运的,因为编程是一门可以通过大量练习提高的技能。不断将自己逼入不舒适区会加快我们的学习和提升能力的速度。与君共勉,多敲代码,成就美好人生!

    因为是第一次写二叉树的内容,如果大家有发现什么不对的,不足之处,还望指出!谢谢!

  • 相关阅读:
    Python paramiko安装报错
    Python 函数返回值类型
    python 数据类型
    python — 模块(二)
    python — 模块(一)
    python 总结
    python 小知识3
    python 小知识3
    python 小知识2
    python — 计算机基础知识
  • 原文地址:https://www.cnblogs.com/phoenlix/p/9439337.html
Copyright © 2011-2022 走看看