码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的三种递归遍历实现

时间:2015-04-17 11:39:39      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:二叉树   遍历   数据结构   递归   

声明:学过二叉树的童鞋可以跳过前面的故事,直接看最后的代码实现。      
        你见过二叉树吗?一种很神奇的树,传说见到他的人都是幸运的。如果你没见过,好运立马降临:
技术分享 
怎么样?有被惊艳到吗?好运已经送到,祝你今晚睡得香甜。
好了,送完祝福,下面讲一个神奇的故事:
        讲故事前,简单说说二叉树。
        那么我要说的二叉树是什么呢?它是一种数据结构,数据结构是什么可以自行百度一下,这里不讨论他。举一个现实中的例子:把某个家庭看作一棵树,这家的爸爸(妈妈)有两个孩子,那么
爸爸(妈妈)就是树的,俩孩子就是这棵树的叶子,而此时这种,孩子只有唯一父辈(爸爸妈妈看作一个整体),父辈或者没有孩子,或者有且最多有两个孩子的树就叫做二叉树,可以参考下图
技术分享
就这样这个家族子子辈辈形成一个越来越高的二叉树。( 注意看它是倒过来的)
        那么这个时候故事来了:有一家的的家谱非常奇特,它从第一页开始,翻阅者每次只能看到家谱的一页,这一页上记录着一个人的信息和他两个孩子在哪一页的指示页码,通过指示页码可以找到这两个孩子的信息存放页。不知道你有没有想象出来这个家谱的样子。大概是下面这个样子:
技术分享 
后面还有很多很多这样的书页。。。
        然后有一个不知道是第几十辈孙子突发奇想,他想看看这本家谱上到底有多少先人,自己又是怎么来的。但是你知道在只有一个始祖页面的情况下,
一个不漏的找出所有人,会有多少种路径够你找,还不一定能找全。。。。看似很难的样子,该怎么办?
        然而,很巧的是这个孩子很勤奋,他学习过一种叫做二叉树的数据结构,还研究过它的遍历算法,直白点,就是把每一个点都访问一次。在这个21世纪互联网快速发展,计算机极度普及
的年代,他只写了一段代码就搞定了,同时还用了三种方法,这个孩子很厉害啊,后生可畏!!!
故事结束 
好了现在来看看二叉树的
三种遍历算法(挺简单的,直接上代码) :
        因为根节点的左右子节点下面又是一棵二叉树,所以遍历就只考虑根、左、右三个节点的访问,访问就是看他在不在,即 if(p !=null),在,就输出他的信息,接着对左右子树使用相同的方法遍历即可。遍历没有返回值。(详见代码)
1.先序遍历
     保证每个节点访问一次
技术分享
2.中序遍历
技术分享
3.后序遍历
 技术分享
有么有很简单,5行搞定,相信你已经理解了。
那么还有一个问题,我用这段遍历代码去遍历谁?遍历二叉树啊!那么二叉树从何而来,这就涉及到二叉树的节点定义,和二叉树的创建了。好,一起来看一下:
4.定义二叉树的节点
首先二叉树每个节点得有一个存储信息的变量,其次它得有左右子树的指针指向,那么就是下面这样了
技术分享
5.二叉树的创建:
如果你理解了上面的先序遍历算法,那么创建也就很简单了,我们先输入一个字符,如果是空节点标志符,就相当于上一个插入的是根节点或是叶子节点了,这个节点就是空了,否则,插入这个信息,递归创建左右子树。看一下代码:
技术分享
上面的代码是我从控制台输入数据,测试的时候用的,如果你是文件输入或者其他方式,相应做修改就行。
以上就是这篇文章的全部内容了,下篇再见。 

二叉树的三种递归遍历实现

标签:二叉树   遍历   数据结构   递归   

原文地址:http://blog.csdn.net/u014360189/article/details/45081939

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!