036_验证二叉搜索树

知识点:中序遍历、二叉搜索树

LeetCode第九十八题:https://leetcode-cn.com/problems/validate-binary-search-tree/submissions/

语言:GoLang

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var pre *TreeNode
func isValidBST(root *TreeNode) bool {
    pre = nil
    return midTraverse(root)
    // return traverse(root, math.MinInt64, math.MaxInt64)
}

// 中序遍历
func midTraverse(root *TreeNode) bool {
    if root == nil {
        return true
    }

    ans := midTraverse(root.Left)

    if pre != nil && pre.Val >= root.Val {
        return false
    }

    pre = root

    ans = ans && midTraverse(root.Right)

    return ans
}

// 普通遍历
func traverse(root *TreeNode, lower int, upper int) bool {
    if root == nil {
        return true
    }

    if root.Val <= lower || root.Val >= upper {
        return false
    }

    return traverse(root.Left, lower, root.Val) && traverse(root.Right, root.Val, upper)
}
posted @ 2020-03-25 19:39  Cenyol  阅读(83)  评论(0)    收藏  举报