算法 – 在BST中,两个节点被随机交换,我们需要找到这两个节点并将它们交换回去

给定二叉搜索树,其中交换任意两个节点.所以我们需要找到这两个节点并将它们交换回去(我们需要交换节点,而不是交换数据)

我尝试通过创建一个具有inorder遍历树的附加数组来执行此操作,并将指针保存到每个节点.
然后我们遍历数组并找到不在排序顺序中的两个节点,现在在树中搜索这两个节点然后交换

所以我的问题是如何在O(1)空间中解决这个问题?

最佳答案
BST上的In order traversal为您提供了有序元素的遍历.
您可以使用有序遍历,找到两个不合适的元素(将它们存储在两个指针中)并将它们交换回来.

这个方法实际上是创建你动态描述的数组,而不是实际创建它.

但是请注意,空间消耗不是O(1),它是O(h),其中h是树的高度,这是由于堆栈跟踪.如果树是平衡的,它将是O(logn)

转载注明原文:算法 – 在BST中,两个节点被随机交换,我们需要找到这两个节点并将它们交换回去 - 代码日志