【背景】
《数据结构导论》学习的第三阶段差不多要收尾了,做题的时候会突然发现,哦,原来是这样,当时觉得自己会了,等到后面再次遇到的时候,又不知道当时的思路了,看得出来这样的学习很肤浅,雨过地皮湿,从长远的角度来看的话,效果是很不好的,还是要动手写写,梳理一下,二叉树的遍历这部分,想不想尝试一下既简单又快捷的方法,随我来吧!
【重温基础】
遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
先序遍历:若被访问的二叉树为空,则执行空操作;否则,依次执行下列操作:访问根节点→ 先序遍历左子树→ 先序遍历右子树;
中序遍历:若被访问的二叉树为空,则执行空操作;否则,依次执行下列操作:中序遍历左子树→ 访问根节点→ 中序遍历右子树;
后序遍历:若被访问的二叉树为空,则执行空操作;否则,依次执行下列操作:后序遍历左子树→ 后序遍历右子树→ 访问根节点;
【实战演练】
以《数据结构导论》课本104页例4-1来举例说明
遍历之前准备:沿着二叉树的节点顺延走一条线,形成一个包围圈,从根结点的左边开始作为入口方向,当经过各个结点之后回来的方向为出口的方向,如下图所示:
【 先序遍历】
先序遍历:在所有结点的入口方向处(一般为左侧)标明数字“1”,按照入口方向顺序历经树中所有结点再次回到根节点之后,从最开始(最左边)的入口点沿树的包围线走下去,依次写出所有标号为“1”的点,即为先序遍历序列。如下图:
得到先序遍历的结点序列为:ABDEGCF
【 后序遍历】
后序遍历:在所有结点的出口/返回方向处(一般为右侧)标名明数字“2”,按照入口方向顺序历经树中所有结点再次回到根节点之后,从最开始(最左边)的入口点沿树的包围线走下去,依次写出所有标号为“2”的点,即为后序遍历序列。如下图:【 中序遍历】
中序遍历:在所有有左右子树的结点和所有叶子结点(度为0)的正下方处标明数字“0”,其它结点只有左子树或右子树,分为两种情况:如果有右子树,则在结点的左侧标明数字“0”;如果有左子树,则在节点的右侧标明数字“0”。按照入口方向顺序历经树中所有结点再次回到根节点之后,从最开始(最左边)的入口点沿树的包围线走下去,依次写出所有标号为“0”的点,即为中序遍历序列。如下图:
得到后序遍历的结点序列为:DBGEACF
【小结】
不将就是发现的原动力,加油!
原文链接:https://www.f2er.com/datastructure/382440.html