一、题目
Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
二、题目大意
二叉搜索树中有两个元素放错位置了,现在需要在不改变树结构的情况下交换两个值。
三、解题思路
解决这个问题需要找出这两个错误的元素,对于二叉搜索树,通过中序遍历可以得到一个单调递增的序列,而且题目中只存在两个错误的值,那么在中序遍历的序列中可以找出一个元素是大于后续部分元素的,并且通过不断向后比较找出该元素应该插入的位置,也就是需要和哪个元素进行交换。
四、代码实现
const recoverTree = root => {
let x = null
let y = null
let pre = null
traverse(root)
let temp = x.val
x.val = y.val
y.val = temp
return root
function traverse (root) {
if (!root) {
return
}
traverse(root.left)
if (pre) {
if (!x && pre.val >= root.val) {
x = pre
}
if (x && pre.val >= root.val) {
y = root
}
}
pre = root
traverse(root.right)
}
}
如果本文对您有帮助,欢迎关注微信公众号,为您推送更多大前端相关的内容, 欢迎留言讨论,ε=ε=ε=┏(゜ロ゜;)┛。
您还可以在这些地方找到我: