Validate Binary Search Tree (GOLANG版)
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node’s key. The right subtree of a node contains only nodes with keys greater than the node’s key. Both the left and right subtrees must also be binary search trees. Example 1:
Input: 2 / 1 3 Output: true Example 2:
5
/ 1 4 / 3 6 Output: false Explanation: The input is: [5,1,4,null,null,3,6]. The root node’s value is 5 but its right child’s value is 4.
/**
-
Definition for a binary tree node.
-
type TreeNode struct {
-
Val int
-
Left *TreeNode
-
Right *TreeNode
-
} */ func isValidBST(root *TreeNode) bool {
INT_MAX := int(^uint(0) >> 1) INT_MIN := ^INT_MAX
if root == nil { return true }
return validate(root, INT_MAX, INT_MIN)
}
func validate(root *TreeNode, max, min int) bool { if (root == nil) { return true }
if root.Val <= min { return false } if root.Val >= max { return false } return validate(root.Left, root.Val, min) && validate(root.Right, max, root.Val)
}