恢复两个元素错放的二叉搜索树

recover a two element miss-placed binary search tree

本文关键字:搜索树 元素 两个 恢复      更新时间:2023-10-16

这是问题所在:

二叉搜索树 (BST) 的两个元素被错误地交换了。在不更改其结构的情况下恢复树。

我的解决方案是在顺序遍历期间将指向节点的指针存储在数组中。然后遍历数组以找到两个未命中定位的节点,更改它们的值。但是我需要 O(n) 空间来分配数组。我的问题是我可以用恒定空间解决它吗?

您不需要将元素存储在数组中。当交换两个元素时,其中一个元素移动到较早的位置,因此它大于在无序遍历中跟随它的元素。您无需将元素存储在数组中即可找到此内容 - 只需保留前一个节点的上下文。类似地,对于向右移动的元素,它将小于它前面的元素,因此您可以通过保持相同的上下文(1 个前面的元素)再次找到它。正如您所建议的,单个无序遍历足以找到放错位置的元素。