java 如何纠正我的中序遍历二叉树?

o2g1uqev  于 2023-05-15  发布在  Java
关注(0)|答案(2)|浏览(145)

所以对于我正在处理的树,我无法计算出无序遍历。目前我有:
四、十一、九、一、五、六、七、八、三、二、十
但这是不正确的。如果任何人有正确答案的解释,那将是有帮助的!我看了一些视频,但我不知道出了什么问题。

我试过:
四、十一、九、一、五、六、七、八、三、二、十
四、十一、九、一、五、六、七、八、三、十、二
这两个都是不正确的,我不知道该怎么处理左边的长链或顺序。

hmmo2u0o

hmmo2u0o1#

“最左边”的节点将是中序遍历中的第一个。
了解这种遍历顺序的一种方法是以这样一种方式绘制树,即每个节点都在自己的垂直列中结束,这样在该节点下方,该列完全为空:没有其他节点,也没有与该列交叉的边。换句话说,父节点的左子树中的节点都应该定位在比父节点更靠左的位置。对于它的右子树中的节点也是一样:它们都应该被放置在更靠右的位置。
对于您的示例树,这将导致以下表示:

现在你要做的就是从左到右读取节点标签:
9 11 4 1 5 6 8 7 3 2 10

kcwpcxri

kcwpcxri2#

在按序遍历中,我们递归地以**“ArB”的顺序遍历节点。在这个符号中,r表示当前节点,而AB**是它的左子树和右子树。
这意味着我们遵循一个简单的算法:
1.输入新节点
1.处理它的左子树
1.过程本身
1.处理它的右子树
在步骤4之后,访问节点的序列应该如下所示:
{nodes visited earlier}, {all of the left subtree nodes}, r, {all of right subtree nodes}

根据您的具体情况,请执行以下步骤:

1.从节点6开始
1.转到6的左子节点->节点1(处理左子树)
1.转到1的左子节点->节点9(处理左子树)
1.节点9没有左子节点,我们可以将其视为已经完全处理
1.我们处理了9的左子元素,因此我们将[9]添加到序列中(进程本身)
1.转到9 -> 11的右子树(处理右子树)…
在完全处理6的左子树后,我们应该得到{9, 11, 4, 1, 5}。然后添加6,因为它的整个左子树已经处理完毕,您可以继续处理它的右子树。最后,整个数组看起来像这样:{all of nodes in left subtree}, 6, {all of nodes in right subtree},它很好地对应于前面提到的**“ArB”**符号。

相关问题