遍历二进制树是指脱离根节点。根据某个序列访问二进制树中的所有节点,以便一次访问一次,一次访问一次。
本文介绍了四个二进制树的遍历方法,它们是先前的序列,介质,跟随 - up和层序列遍历,每种方法提供了Java语言的详细代码演示。最后,还引入了遍历结果推导的方法。
遍历二进制树是指脱离根节点。根据某个序列访问二进制树中的所有节点,以便一次访问一次,一次访问一次。
访问实际上是为了确定特定的操作是基于实际需求,例如每个节点,输出打印等的相关计算。它被算作一个抽象操作。在这里,我们可以简单地假设访问是访问权限的数据信息输出节点。
二进制树遍历的顺序与线性结构不同,至多从头到尾,周期和两个方面都简单地遍历。。访问节点后,访问的下一个节点面对不同的选择。因此,有很多方法可以穿越。主要方法是第一阶遍历,中序 - 序列遍历,后序列遍历和分层遍历。
如果您不太了解,则可以阅读本文:二进制树的输入以及Java实施情况的详细说明。
本文以下面的样本遍历下面的二进制树:
首先,在上图中构建二进制树,在二进制树的简单链存储结构的实现下方。Java实施案例。
规则是:如果二进制树是空的,则空操作返回;否则,从根节点开始,首先穿越根,然后是左子树,最后穿过右子树;然后左下树,然后左下树,最后移动到右树。Adopt递归思想。
在第一阶遍历中,节点的遍历在节点的子节点的遍历之前进行遍历。这也是“前言”。
第一阶遍历也称为初步遍历。
从r根节点开始,遍历过程如下:
以下代码添加到linkedbinarytree类中。
查看输出:
r-> a-> c-> g-> h-> h-> d-> i-> b-> e-> e-> f-> f-> j
确实,遍历顺序是相同的。
规则是:如果树是空的,则空操作返回;否则,从根节点开始,首先穿越根节点的左子树,然后访问root节点,最后穿过右子树;日历树的根节点的左子树,然后访问树根的节点,最后穿越右sub -tree.adopt递归思想。
在介质序列的遍历中,节点的遍历在节点的左子节点的遍历之前进行遍历,而右儿子的节点在遍历之前遍历。这是“中阶”。
树在图中的树中穿越。从r root节点中,顺序如下:
查看输出:
g-> c-> h-> a-> i-> i-> d-> r-> e-> e-> b-> j-> f> f> f> f
确实,遍历顺序是相同的。
规则是:如果树是空的,则空操作返回;否则,从根节点开始,首先穿越根节点的左子树,然后穿过右子树,最后穿过根节点;日历树的根节点的左子树,然后穿过右子树,最后穿过根树根的节点。
在后序列遍历中,节点的遍历在节点的Son节点的遍历后遍历。这是“ post -order”。
树在图中的树之后穿越。从r root节点中,顺序如下:
查看输出:
g-> h-> c-> i-> d-> a-> e-> e-> j-> f-> b-> b-> r> r> r> r
确实,遍历顺序是相同的。
规则是:如果树是空的,则空操作返回;否则,从树的第一层开始,即根节点开始从上到下访问它。节点一一访问。在层的遍历,节点的遍历,上部节点的遍历之前下节点的遍历。这是“层顺序”。
图中的树被层序列捕获。从r根节点开始,顺序如下:
查看输出:
r-> a-> b-> c-> d-> e-> f-> f-> g-> h-> i-> i-> j
确实,遍历顺序是相同的。
标题:二进制树前奏的前奏是在r-> a-> a-> c-> h-> d-> i-> i-> b-> e-> e-> e-> j-> j-> f中排列的,中序是c-> h-> a-> d-> i-> i-> r-> e-> e-> k-> k-> k-> j-> b-> f,这种二进制树遍历的结果是什么?
此类问题经常出现在采访中。该原则不是很复杂,并且具有一定的规律性。
找到前面顺序遍历的第一个字符:r,您可以看到r是root节点;
然后找到根节点r在中阶遍历中的位置,左C-> h-> a-> d-> i,这是最大的左子树,e-> k-> j - > j- > b-> f是最大的右子树。
找到由上一个序列遍历的第二个字符:a,然后您还可以在子树中找到节点a。可以看出,a是r根节点的左节点,它也是左子树的根节点。然后可以得出,左子树也有Zuozi树III:C-> H和右Zishiⅳ:d-> i
找到以前序列遍历的第三和第4个字符:c-> h,我们可以看到,当子树的左节点ⅰ比较序列c-> h的顺序时,可以看到c-> h的顺序。
找到由前奏的第五和第六个字符:d-> i,我们可以看到D比较了subtree的正确节点,比较了序列d-> i的序列,我们可以看到我是正确的孩子节点d nodeNode;
在这一点上,可以推断出最大的左子树的数据结构:如下:
让我们得出下面的正确树。
右子树的初步遍历节点是排除左子树和根节点留下的剩余节点:b-> e-> e-> j-> k-> f,中等顺序的遍历为e->>k-> j-> b-> f
初步序列遍历的第一个节点是B,B可以是右子树的根节点。
中间序列中节点B的左侧为e-> k-> j,右为f.you可以是节点b的右节点,它是叶子节点。这样,仍然有最后一个左下的子树ⅴ;
左侧托架树的前奏是消除子树的根节点和子树的右子节点。因此,只有一种可能性,也就是说,每个节点被用作图层,底层j是节点k的左节点,中间层k是节点e right retrentub -node -node -node,其余的e节点,自然是左tos的左子节点。
目前,树结构推导已完成!树成分如下:
有了树的结构,后序后遍历的结果自然清晰:h-> c-> i-> d-> a-> a-> k-> k-> j-> e-> e-> f-> b->R.
初步序列是玫瑰岩r-> a-> a-> c-> h-> d-> i-> i-> b-> b-> b-> e-> e-> j-> k-> f序列是c-> h-> a-> a-> a-> a-> a->d-> i-> r-> e-> k-> j-> j-> b-> f。
订购排序的顺序是左子树,右子树和根节点。
R,作为根节点,必须在邮寄顺序排序的最后一个中排列。
最大的左子树序列是c-> h-> a-> d-> i,相应的顺序排序为a-> c-> c-> h-> d-> i,root节点A.最大的右子树的序列是e-> k-> j-> b-> f,初步顺序为b--> e-> e-> j-> k-> f,root节点B。
此处确定的顺序是:A-> B->R。
让我们看一下左子树ⅰ,根节点为a,然后其左和右节点是一个孩子ⅲ,而孩子的树是。
子树III的序列为c-> h,相应的顺序排序c-> h。
子树四的序列是d-> i,相应的顺序排序d-> i。此时可以确定的顺序为h-> c-> c-> i-> i-> d-> a-> b- > B.实际上,左树在左树后被穿过。
让我们看一下右侧子树ⅱ,根节点为b,然后它的左和右节点也不会进入子树,而是孩子树。
子树的序列是e-> k-> j,相应的顺序排序E-> j-> k。根节点是E.,每个层上的一个节点,第一层E,第二层K和第三层J。当时可以确定的顺序为H- - > c-> i-> i-> d-> a-> k- > J-> J-> E-> B-> R。
其余的节点F自然知道位置的唯一左子树节点和根节点是自然已知的。最终位置是:h-> c-> i-> d-> a-> k-> k-> j-> e-> f-> b-> R。
完全推导。
情况如下,初步序列是ABC,后一个序列是CBA。可能的结果如下:
本文介绍了4种类型的遍历。前三种类型实际上取决于递归方法。底层是依靠JVM的堆栈结构的方法;第四层序列遍历并取决于队列。递归呼叫和堆栈之间的关系,您可以阅读本文:Java中堆栈数据结构的详细说明以及实现和应用程序案例演示。
实际上,第一阶,中级和后序列遍历也称为深度优先级遍历(DFS)。该过程将短暂加深到每个可能的分支路径。层序列遍历也称为广度优先级遍历(BFS)。搜索所有带有K至K的顶点,然后搜索具有K+L的其他顶点。
上面的许多专业术语非常奇怪,因为它属于地图理论算法的一部分。实际上,树是一种特殊的类型,没有封闭的环图(地图)。要学习一张好的图片?首先和我一起学习树!
作者:Liu Java