有根树的遍历

这是很多初赛考的东西,虽然一般复赛不考,但为了初赛,我还是写写吧。

先给一张树的图:

image

很经典的树,一共六个结点,根是A。那我就照着这张图,讲讲树的遍历。

壹、简介

一、先序遍历,根在前,再是左子树,再从左到右一颗颗子树遍历,即最后右子树。

例:本图中应为ABDECF。

二、后序遍历,先左子树,从左至右,到右子树后,再回到根。

例:本图中应为DEBFCA。

三、层次遍历,一层一层来,从根,到根的儿子,到孙子……最后到叶子结点。

例:本图中应为ABCDEF。

四、叶结点遍历,从左到右,依次访问叶子结点,不要考虑有儿子的结点。

例:本图中应为DEF。


贰、例子

为再巩固下这些知识,同时避免出现误区,我在给一张图,写写他们的四个遍历。

树二image

一、前序遍历,应为ABCEFDGHI。

二、后序遍历,应为EFCDBGIHA。

三、层次遍历,应为ABGHCDIEF。

四、叶结点遍历,应为EFDHI。

还算简单的,就这样,多做就会。


叁、实现方法

一、前序和后续遍历,用的是递归,即我们采用的DFS(深度优先搜索),又叫搜索与回溯算法,因为你要返回至根结点,再到下一个子结点。

这里主要用到的是父亲孩子表示法。

二、层次遍历,偏向于BFS(即广度优先搜索,又名宽度优先搜索),可以用队列实现,我具体就不细讲了。见到一个结点,先收录他的所有儿子,再收录他的所有兄弟的儿子,以此类推……

这里主要用到的是孩子兄弟表示法。

三、叶结点遍历,很少用,也没有对应的算法,莫非是……找个死胡同?

这里主要用到的是儿子表示法,找到没儿子的那一个。


好勒,就这样,明天日更,等你。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容