这是很多初赛考的东西,虽然一般复赛不考,但为了初赛,我还是写写吧。
先给一张树的图:
image
很经典的树,一共六个结点,根是A。那我就照着这张图,讲讲树的遍历。
壹、简介
一、先序遍历,根在前,再是左子树,再从左到右一颗颗子树遍历,即最后右子树。
例:本图中应为ABDECF。
二、后序遍历,先左子树,从左至右,到右子树后,再回到根。
例:本图中应为DEBFCA。
三、层次遍历,一层一层来,从根,到根的儿子,到孙子……最后到叶子结点。
例:本图中应为ABCDEF。
四、叶结点遍历,从左到右,依次访问叶子结点,不要考虑有儿子的结点。
例:本图中应为DEF。
贰、例子
为再巩固下这些知识,同时避免出现误区,我在给一张图,写写他们的四个遍历。
树二image
一、前序遍历,应为ABCEFDGHI。
二、后序遍历,应为EFCDBGIHA。
三、层次遍历,应为ABGHCDIEF。
四、叶结点遍历,应为EFDHI。
还算简单的,就这样,多做就会。
叁、实现方法
一、前序和后续遍历,用的是递归,即我们采用的DFS(深度优先搜索),又叫搜索与回溯算法,因为你要返回至根结点,再到下一个子结点。
这里主要用到的是父亲孩子表示法。
二、层次遍历,偏向于BFS(即广度优先搜索,又名宽度优先搜索),可以用队列实现,我具体就不细讲了。见到一个结点,先收录他的所有儿子,再收录他的所有兄弟的儿子,以此类推……
这里主要用到的是孩子兄弟表示法。
三、叶结点遍历,很少用,也没有对应的算法,莫非是……找个死胡同?
这里主要用到的是儿子表示法,找到没儿子的那一个。
好勒,就这样,明天日更,等你。