跳转至

LC98 - 验证二叉搜索树

ValidateBST.go
package BinaryTree

import "math"

type isBSTRet struct {
    isBST          bool
    maxVal, minVal int
}

func isValidBST(root *TreeNode) bool {
    return isBSTFunc(root).isBST
}

func isBSTFunc(root *TreeNode) isBSTRet {
    if root == nil {
        return isBSTRet{
            isBST:  true,
            maxVal: math.MinInt,
            minVal: math.MaxInt,
        }
    }
    leftRet := isBSTFunc(root.Left)
    rightRet := isBSTFunc(root.Right)
    return isBSTRet{
        isBST:  leftRet.isBST && rightRet.isBST && root.Val > leftRet.maxVal && root.Val < rightRet.minVal,
        maxVal: max(leftRet.maxVal, rightRet.maxVal, root.Val),
        minVal: min(leftRet.minVal, rightRet.minVal, root.Val),
    }
}