【LeetCode】判断一个二叉树是否为二叉搜索树

LeetCode

题目描述:

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。

输入:
    4
   / 
  1   6
     / 
    5   7
输出: false
解释: 输入为: [5,1,6,null,null,5,7]。
     根节点的值为 4 ,但是其右子树的左子节点值为5。没有小于根节点,不是二叉搜索树。

解题

分析:

要考虑到全部左子节点小于根节点。上面的例子,是一个很好的反例。那么递归时,按照中序遍历,判断当前节点是否大于中序遍历的前一个节点,如果大于,说明满足 BST,继续遍历;否则直接返回 false。

二叉搜索树的中序遍历是递增的,所以只要判断当前元素比前一个元素答即可。这里用全局变量pre表示上一个节点的val。

class Solution {
    long pre = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        // 访问左子树
        if (!isValidBST(root.left)) {
            return false;
        }
        // 访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回 false;否则继续遍历。
        if (root.val <= pre) {
            return false;
        }
        pre = root.val;
        // 访问右子树
        return isValidBST(root.right);
    }
}

J3 链接:https://leetcode-cn.com/problems/validate-binary-search-tree

经验分享 程序员 微信小程序 职场和发展