二叉搜索树的两个节点被交换。
输入树:
10
/ \
5 8
/ \
2 20
在上面的树中,必须交换节点 20 和 8 才能修复树。
输出树:
10
/ \
5 20
/ \
2 8
我按照这里给出的解决方案。但我觉得解决方案不正确,因为:
根据网站:
交换的节点在 BST 的中序遍历中不相邻。
例如,节点 5 和 25 交换为
{3 5 7 8 10 15 20 25}
.
给定树的中序遍历是3 25 7 8 10 15 20 5
如果我们仔细观察,在中序遍历过程中,我们发现节点 7 比之前访问的节点 25 小。这里保存节点 25(上一个节点)的上下文。再次,我们发现节点 5 比之前的节点 20 小。这一次,我们保存节点 5(当前节点)的上下文。最后交换两个节点的值。
所以我的观点是,如果它正在考虑 25,因为它大于 7,那么它也应该考虑 20,因为它也大于 5。那么这是正确的解决方案还是我遗漏了什么?