上篇博客介绍了构建一棵二叉树,可是并无介绍如何遍历二叉树,一下,咱们只介绍3三种遍历二叉树的形式,java
分别是,前序遍历,中序遍历,后序遍历,由于我也是学习阶段,不免会有解释不清,或者理解有误的,欢迎指正node
----------------------------------我是分割线------------------------------------post
咱们先定义一棵普通的二叉树,以下图学习
咱们先说前序遍历吧!
前序遍历:经过递归进行遍历,若是二叉树为空,则操做返回,若是非空,不然从根结点开始,而后遍历左子树完左子树,在遍历右子树
前序遍历的结果是: ABDGHEICFJK 为何会遍历出这种结果,请看上面对前序遍历的描述,先遍历左边,而后在遍历右边spa
JAVA代码以下:code
//前序遍历 public static void preTraversal(Node node){ if(null!=node){ System.out.println(node.getData()); preTraversal(node.getLeft()); preTraversal(node.getRight()); return; } }
而后是中序遍历!
中序遍历:经过递归进行遍历,若是二叉树为空,则操做返回,若是非空,不然从根结点开始,中序遍历根结点的左子树,而后访问根结点,最后中序遍历右子树
前序遍历的结果是: GDHBEIACJFK 为何会遍历出这种结果,请看上面对中序遍历的描述,先遍历左边,而后访问根结点,而后在遍历右边递归
JAVA代码以下:get
//中序遍历 public static void inOrder(Node node){ if(null!=node){ inOrder(node.getLeft()); System.out.println(node.getData()); inOrder(node.getRight()); return; } }
最后是后序遍历!
后序遍历:经过递归进行遍历,若是二叉树为空,则操做返回,若是非空,不然从左到右,先叶子后结点的方式遍历访问左右子树,最后访问根结点
前序遍历的结果是: GHDIEBJKFCA 为何会遍历出这种结果,请看上面对中序遍历的描述,从左到右,先叶子,后结点博客
JAVA代码以下:class
//后序遍历 public static void postOrder(Node node){ if(null!=node){ postOrder(node.getLeft()); postOrder(node.getRight()); System.out.println(node.getData()); return; } }
以上就是二叉树的其中三种遍历方式,其中的差别性就在于递归调用的时候,对某个结点进行操做,
例如前序遍历,每次递归调用,都是先打印结点的data信息,而后是访问左叶子结点信息,又是打印结点信息,直到没有左叶子的时候,返回上层结点,而后调用右叶子,如此递归,就会出现前序遍历的结果
中序跟后序跟前序原理差很少,不一样的在于何时打印结点信息而已,就给各位看官本身看了
到这,文章就结束了!
以上,均为本人我的理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流
欢迎转载,请注明出处跟做者,谢谢!