给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。

思路

  1. 中序遍历,排序,进而比较异常节点并重新赋值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var recoverTree = function (root) {
const [nodes, values] = [[], []]
const searchTree = (node) => {
if (!node) {
return
}
searchTree(node.left)
nodes.push(node)
values.push(node.val)
searchTree(node.right)
}
searchTree(root)
values.sort((a, b) => a - b)
for (let i = 0; i < nodes.length; ++i) {
nodes[i].val = values[i]
}
}