Files
leetcode/top-100-liked/43/leetcode_test.go
T
2026-06-22 20:50:10 +10:00

67 lines
1.2 KiB
Go

package top100liked
// https://leetcode.cn/problems/validate-binary-search-tree/description/?envType=study-plan-v2&envId=top-100-liked
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
// AC, 但很慢
// func inorderTraversal(root *TreeNode) []int {
// if root == nil {
// return []int{}
// }
// res := []int{}
// if root.Left != nil {
// res = append(res, inorderTraversal(root.Left)...)
// }
// res = append(res, root.Val)
// if root.Right != nil {
// res = append(res, inorderTraversal(root.Right)...)
// }
// return res
// }
// func isValidBST(root *TreeNode) bool {
// if root == nil {
// return true
// }
// l := inorderTraversal(root)
// if len(l) == 1 {
// return true
// }
// for i, j := 0, 1; j < len(l); {
// if l[i] >= l[j] {
// return false
// }
// i++
// j++
// }
// return true
// }
func isValidBST(root *TreeNode) bool {
var prev *int
var inorder func(node *TreeNode) bool
inorder = func(node *TreeNode) bool {
if node == nil {
return true
}
if !inorder(node.Left) {
return false
}
if prev != nil && *prev >= node.Val {
return false
}
prev = &node.Val
if !inorder(node.Right) {
return false
}
return true
}
return inorder(root)
}