证明二进制搜索树的有序遍历已排序(无归纳)

时间:2014-12-08 19:27:08

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

我可以证明按顺序遍历二叉搜索树会产生值的排序进度,而不使用归纳法吗?

这不是一个功课问题。

1 个答案:

答案 0 :(得分:3)

这是我的矛盾证明草图。

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

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

现在,T不能是单例(即,只是一个叶子),因为单例的遍历产生一个长度为1的序列,这是一个非常有序的。

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

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

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

Howzat?