Fork me on GitHub

如何遍历二叉树

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

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

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

 

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

 

1、前序遍历。

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

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

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

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

首先来颗树

      1

   2     3

4  5  6  7

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

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

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

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

前序遍历右子树,返回空

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

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

前序遍历右子树,返回空

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

 

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

 

2、中序遍历

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

访问过程为4251637

 

3、后序遍历

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

访问过程为4526731

 

4、层序遍历

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

访问过程为1234567

 

 

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

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

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

posted @ 2016-07-16 23:00  LinkinStar  阅读(1265)  评论(0编辑  收藏  举报