0099.恢复二叉搜索树
方法一:隐式中序遍历
时间复杂度 $O(N)$,空间复杂度 $O(H)$,其中 $N$ 为二叉搜索树的节点个数,$H$ 为二叉搜索树的高度。
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func recoverTree(root *TreeNode) {
var pre *TreeNode = &TreeNode{Val: -1<<31 - 1}
var first, last *TreeNode = nil, nil
var middle func(n *TreeNode)
middle = func(n *TreeNode) {
if n == nil {
return
}
middle(n.Left)
if n.Val < pre.Val {
last = n
if first == nil {
first = pre
} else {
return
}
}
pre = n
middle(n.Right)
}
middle(root)
first.Val, last.Val = last.Val, first.Val
}