【发布时间】:2023-04-03 08:27:01
【问题描述】:
二叉搜索树的两个节点被交换。
输入树:
10
/ \
5 8
/ \
2 20
在上面的树中,必须交换节点 20 和 8 才能修复树。
输出树:
10
/ \
5 20
/ \
2 8
我遵循here 中给出的解决方案。但我觉得解决方案不正确,因为:
根据网站:
交换的节点在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。那么这是正确的解决方案还是我遗漏了什么?
【问题讨论】:
-
@downvoter 不要放荡不羁,敢于评论。
标签: algorithm data-structures binary-search-tree