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