二叉搜索树

Posted by Liao on 2023-02-22

二叉搜索树(Binary Search Tree,BST)是一种二叉树,它或者是一棵空树,或者是具有下列性质的二叉树:

  • 若左子树不空,则左子树上所有结点的值均小于它的根结点的值,右子树上所有结点的值均大于根结点的值
  • 中序遍历树的每个结点是有序的

验证二叉搜索树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
func main() {
ans := isValidBST(&TreeNode{Val: 4, Left: &TreeNode{2, &TreeNode{1, nil, nil}, &TreeNode{3, nil, nil}}})
fmt.Println(ans)
}

type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}

func isValidBST(root *TreeNode) bool {
pre := math.MinInt64
var dfs func(*TreeNode) bool
dfs = func(node *TreeNode) bool {
if node == nil {
return true
}
if !isValidBST(node.Left) {
return false
}
if node.Val <= pre {
return false
}
pre = node.Val
return dfs(node.Right)
}
return dfs(root)
}