1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【数据结构】理解二叉树的三种遍历--前序 中序 后序 +层序(简明易懂)

【数据结构】理解二叉树的三种遍历--前序 中序 后序 +层序(简明易懂)

时间:2019-12-02 18:59:10

相关推荐

【数据结构】理解二叉树的三种遍历--前序 中序 后序 +层序(简明易懂)

一、易懂的形象理解

其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序、中序、后序 +层序!

1、先序遍历

先序遍历可以想象成,小人从树根开始绕着整棵树的外围转一圈,经过结点的顺序就是先序遍历的顺序

先序遍历结果:ABDHIEJCFKG

让我们来看下动画,和小人儿一起跑两遍就记住啦,记住是绕着外围跑哦

2、中序遍历

中序遍历可以想象成,按树画好的左右位置投影下来就可以了

中序遍历结果:HDIBEJAFKCG

下面看下投影的过程动画,其实就是按左右顺序写下来就行了

3、后序遍历

后序遍历就像是剪葡萄,我们要把一串葡萄剪成一颗一颗的。

还记得我们先序遍历绕圈的路线么?

就是围着树的外围绕一圈,如果发现一剪刀就能剪下的葡萄(必须是一颗葡萄),就把它剪下来,组成的就是后序遍历了。

后序遍历结果:HIDJEBKFGCA

让我们来看下动画

4、层序遍历

层序遍历太简单了,就是按照一层一层的顺序,从左到右写下来就行了。

后序遍历结果:ABCDEFGHIJK

不知道通过这种方式,有没有觉得闭着眼睛都能写出前序、中序、后序 、层序了呀,不过这只是为了大家好理解,我想出的一种形象思维,为了用代码实现,我们还需要具体了解一下前序、中序、后序遍历。

二、真正理解三种遍历

来,让我们先把所有空结点都补上。

还记得我们先序和后序遍历时候跑的顺序么?按照这个顺序再跑一次,就是围着树的外围跑一整圈

让我们来理解一下绕着外围跑一整圈的真正含义是:遍历所有结点时,都先往左孩子走,再往右孩子走。

观察一下,你有什么发现?

有没有发现,除了根结点和空结点,其他所有结点都有三个箭头指向它。

一个是从它的父节点指向它,一个是从它的左孩子指向它,一个是从它的右孩子指向它

一个结点有三个箭头指向它,说明每个结点都被经过了三遍。一遍是从它的父节点来的时候,一遍是从它的左孩子返回时,一遍是从它的右孩子返回时

其实我们在用递归算法实现二叉树的遍历的时候,不管是先序中序还是后序,程序都是按照上面那个顺序跑遍所有结点的

先序中序和后序唯一的不同就是,在经过结点的三次中,哪次访问(输出或者打印或者做其他操作)了这个结点。有点像大禹治水三过家门,他会选择一次进去。

先序遍历顾名思义,就是在第一次经过这个结点的时候访问了它。就是从父节点来的这个箭头的时候,访问了它。

中序遍历也和名字一样,就是在第二次经过这个结点的时候访问了它。就是从左孩子返回的这个箭头的时候,访问了它。

后序遍历,就是在第三次经过这个结点的时候访问了它。就是从右孩子返回的这个箭头的时候,访问了它。

怎么样,这样有没有很好的理解?其实不管是前序中序还是后序,在程序里跑的时候都是按照同样的顺序跑的,每个结点经过三遍,第几遍访问这个结点了,就叫什么序遍历。

当我们脑子里有这个概念的时候, 再去看实现代码就很好理解了,下一篇博文我会贴出和讲解具体的实现代码。

【本人刚开始写博文,不知道怎么解释能让大家理解的更清晰一点,自己也很菜,还有很多不懂的,请大家多多包涵,多多指教。】

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。