那些妖术——树的遍历

本文参加CSDN博客大赛,如果你喜欢请投一票,非常感谢

 

这个方法有点邪门,和大家在课堂上学的有点不一样,所以blog的名字取得有点邪乎。

 

一般的程序员应聘技术类的笔试都会有一道题目,那就是树的遍历(前序遍历,中序遍历和后续遍历)。这里教大家玩点新鲜的,

可能和平时大家学的有点不一样。但是绝对是在考场上解决问题的神器,因为一个字快,可以帮你节省时间做其他的题目。

喜欢的小伙伴记得点赞啊。(*^__^*) 

                                                     

一.中序遍历
这个是最简单的,什么是中序遍历,那就是把我们的树压扁了就可以得到我们的中序遍历,所以中序遍历就是DBGEHACIJF。
什么是把树压扁了呢?把每一个节点想象成一个滑轮,然后把它以中间的节点为中心压扁这个树,可以把整个树折叠成一条

直线,就想象成把这个树压扁了。

                                                    

                                                             

 

以此类推,继续把整个树都压扁。

                                                           

 

 

再把左子树以B为中心压扁得到序列DBGEH。在这里我们可以把E这个树看做是一个整体E’,压扁之后是DBE’,其中E’是等于GEH的压的时候

保证每一个节点的左右子树是位置不变的,就是左边的永远在左边,不能出现左边的压在了右边的里面这种类似的情况。这个时候就可以发现

我们压缩右子树的时候I在J的右边所以压缩为IJ,之后在继续压缩为IJF这个时候以C为“根节点”的树在压缩就是CIJF。最后压缩得到的子树就是

中序遍历DBGEHACIJF

                                                                                           

                                                                                                

                                                                                   

二.前序遍历

                                                                     

 

前序遍历这里就要很清楚一个前后顺序,在这里认为左子树永远在右子树的前面。除了叶子节点的每一个节点都要遵循这个顺序。

红线左边的节点都在红线右边的前面。前序遍历在这里我取了一个名字就叫做水流法。水流是从上到下冲刷我们的树的,在前面

的节点会先受到水流的冲刷.

                                                                    

 

 

如图所示水流是从左边来的,先受到冲击的就是ABD,用于水流是先冲击A的(水是自上而下的流动的)所以A先受到冲击,

接着就是B之后就是D。随着水流的冲刷ABD节点就会冲垮,我们便把他们擦除。在前面的节点先受到冲刷,后面的节点后

受到冲刷,这个时候然后一一消失。

                                                                       

 

需要记住的一点就是左子树一定是在右子树的前面。所以之后不见的是EG(他们的根节点是A)之后依次消除H,CFIJ。

注意水是从上往下冲刷的。之后依次类推。

                                                                           

                                                                          

                                                                            

                                                                             

                                                                                

三.后序遍历

                                                                               

 

后续遍历用的也是水流法对树进行遍历,这个时候水流是从后面来的,也就是树的右边。由于水流的特性我们也认为

最上面的和最前面的最先受到伤害,最先被腐蚀,直到消失。

                                                                                  

 

所以最先消失的就是ACF。


                                                                                 

 

 

                                                                                    

 

 

                                                                                    

 

 

在这里由于右边的树在前面所以先消失的是G,D在最左边所以最后消失。这个时候树的节点消失的顺序就是ACFIJBEHGD,由于是后续遍历所以我们要倒过来写:DGHEBJIFCA

 

至此,我们已经完成了所有的前序遍历中序遍历和后续遍历。

 

 

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程 https://www.cbedai.net/chichoxian

 

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值