在按序遍历中,我们递归地以**“ArB”的顺序遍历节点。在这个符号中,r表示当前节点,而A和B**是它的左子树和右子树。 这意味着我们遵循一个简单的算法: 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”**符号。
2条答案
按热度按时间hmmo2u0o1#
“最左边”的节点将是中序遍历中的第一个。
了解这种遍历顺序的一种方法是以这样一种方式绘制树,即每个节点都在自己的垂直列中结束,这样在该节点下方,该列完全为空:没有其他节点,也没有与该列交叉的边。换句话说,父节点的左子树中的节点都应该定位在比父节点更靠左的位置。对于它的右子树中的节点也是一样:它们都应该被放置在更靠右的位置。
对于您的示例树,这将导致以下表示:
现在你要做的就是从左到右读取节点标签:
9 11 4 1 5 6 8 7 3 2 10
kcwpcxri2#
在按序遍历中,我们递归地以**“ArB”的顺序遍历节点。在这个符号中,r表示当前节点,而A和B**是它的左子树和右子树。
这意味着我们遵循一个简单的算法:
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”**符号。