【问题标题】:Proving that in-order traversal of binary search tree is sorted (without induction)证明二叉搜索树的中序遍历是有序的(无需归纳)
【发布时间】:2014-12-08 19:27:07
【问题描述】:

我能否证明在不使用归纳法的情况下按顺序遍历二叉搜索树会产生有序的值序列?

这不是真正的家庭作业问题。

【问题讨论】:

  • 它遵循二叉搜索树的定义。在 BST 中,左节点小于根,右节点大于或等于根。因此,如果您递归地访问左节点、父节点、右节点,那么您将按升序获得节点。如果你没有,那么你就没有二叉搜索树。
  • 在这种情况下,您可能会使用反证法。
  • 我直观理解,但除了使用归纳法之外,我真的不知道如何更正式地证明它。 @Rafe,你能明确写出来吗?

标签: algorithm data-structures tree binary-search-tree


【解决方案1】:

这是我的矛盾证明草图。

我们的目标是证明有限有序二叉树的中序遍历会产生有序序列。

为了通过矛盾来证明这一点,我们首先假设相反的情况:存在一些有序二叉树,使得它的中序遍历产生一个无序序列。由于我们的树是有限的,因此必须有一个最小的这样的实例。我们称这棵树为 T。

现在,T 不能是单例(即,只是一片叶子),因为遍历单例会产生一个长度为 1 的序列,该序列是平凡有序的。

因此,T 必须具有某种形状,L-x-R,其中 x 是分别连接左右子树 L 和 R 的顶点值。

由于 T 是最小且有序的,因此 L 和 R 必须是有序树,其有序遍历产生有序序列。此外,我们知道 L 中的所有项目不能大于 x,R 中的所有项目不能小于 x。现在,T的遍历是[T] = [L] ++ [x] ++ [R]。但是这个序列必须是有序的,这与我们最初关于 T 的假设相矛盾。

因此不存在这样的 T,因此任何有序二叉树的中序遍历都必须产生有序序列。

怎么样?

【讨论】:

  • 这是一个很棒的答案@Rafe :),它真的很容易理解你给出的建议,证明有点使用归纳但内部矛盾:)。如果我错了,请纠正我。
  • @AnkitSablok 你真好!我不认为证明使用归纳法,它需要一个基本案例和一个归纳步骤。这只是利用了有限二叉树是可枚举的事实。
猜你喜欢
  • 2020-09-25
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多