如何遍历二叉树
之前一直说有道题目要用到二叉树的定义以及遍历,所以一直都没写,这次先来说说二叉树的遍历。
对于二叉树的定义,以及二叉树的一些性质,在这里我就不多说了。
这次主要是说说怎么样去遍历一颗二叉树。
这里一共给出4种遍历的方式,然后给出思路,具体代码就不编写了,因为对于二叉树来说,不同的方式存放,代码差距还是很大的,所以理解思路就好。
1、前序遍历。
首先访问根节点,然后前序遍历左子树,再前序遍历右子树,遇到空就返回。
解释一下,在学习树的时候其实很多的时候会用到递归的思想,因为树本身的定义就是递归的。
这里的遍历的思想也是一样,也是递归的。
举个例子说明一下,一下几个遍历的思路参考这个例子的模型
首先来颗树
1
2 3
4 5 6 7
这棵树来说,先访问根节点1
然后前序遍历左子树,先访问根节点2
然后前序遍历左子树,先访问根节点4
然后前序遍历左子树,返回空
前序遍历右子树,返回空
前序遍历右子树,先访问根节点5
然后前序遍历左子树,返回空
前序遍历右子树,返回空
。。。。。依次下去,最后访问的过程为1245367
下面的遍历我就不多说明了,直接看最后遍历的结果吧。
2、中序遍历
先中序遍历左子树,再访问根节点,最后中序遍历右子树,遇到null返回
访问过程为4251637
3、后序遍历
先后序遍历左子树,在后序遍历右子树,最后访问根节点,遇到null返回
访问过程为4526731
4、层序遍历
按照层级结构,在访问第一层,再访问第二层,每一层从左往右一次访问
访问过程为1234567
我暂时只是列举出这几种遍历的方式,至于什么时候用到了,哪一种遍历方式适合当下的题目或者环境,这还有待思考和学习。
然后是对于遍历的转换,如果给出一长串数,说这是用中序遍历的结果,然后让你还原出那颗树,我觉得只要能懂原理的话,就不难了。
至于代码上的实现,基本上都是用递归来实现的,根据定义很容易给出,所以就不多写了。