美文网首页
[lintcode]95.验证二叉查找树

[lintcode]95.验证二叉查找树

作者: Titansonia | 来源:发表于2017-02-19 15:01 被阅读0次

描述

给定一个二叉树,判断它是否是合法的二叉查找树(BST)
一棵BST定义为:
节点的左子树中的值要严格小于该节点的值。
节点的右子树中的值要严格大于该节点的值。
左右子树也必须是二叉查找树。
一个节点的树也是二叉查找树。

代码

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param root: The root of binary tree.
     * @return: True if the binary tree is BST, or false
     */
    public boolean isValidBST(TreeNode root) {
        boolean result = false;
        if (root == null) {
            result = true;
        } else if (root.left == null && root.right == null){
            result = true;
        } else if (root.left == null){
            if (root.right.val > root.val){
                if (root.right.left == null || root.right.left.val > root.val){
                    result = true;
                }
            }
            result = result && isValidBST(root.right);
        } else if (root.right == null){
            if (root.left.val < root.val){
                if (root.left.right == null || root.left.right.val < root.val){
                    result = true;
                }
            }
            result = result && isValidBST(root.left);
        } else {
            boolean tmp = false;
            if (root.left.val < root.val && root.right.val > root.val){
                if (root.right.left == null || root.right.left.val > root.val){
                    result = true;
                }
                if (root.left.right == null || root.left.right.val < root.val){
                    tmp = true;
                }
            }
            result = result && tmp && isValidBST(root.left) && isValidBST(root.right);
        }

        return result;
    }
}

相关文章

  • [lintcode]95.验证二叉查找树

    描述 给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的...

  • LintCode 95. 验证二叉查找树

    题目描述 给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为:节点的左子树中的值要严格小于该...

  • 二叉树

    查找二叉树中最大的搜索二叉树拓扑结构 96.不同的二叉搜索树给定n,求可以构成多少种二叉搜索树 95. 不同的二叉...

  • LintCode - 验证二叉查找树(中等)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 难度:入门 要求: 给定一个二叉树,判断它是否是合法的二叉查...

  • Java 算法-不同的二叉查找树I和II(动态规划和深搜算法)

      二叉查找树在数据结构中学习,但是感觉自己学的非常水,最近在lintCode上做了两道的关于二叉查找树的题,感觉...

  • [LeetCode OJ]- Valid Binary Sea

    题目要求:验证一个树是否为二叉搜索树。 二叉搜索树:(BST,二叉排序树,二叉查找树)。 一颗二叉检索树或者为空树...

  • 极客时间数据结构与算法之美笔记25~26

    二叉树到二叉查找树,是为了查找数据的效率接近logN。 二叉查找树到平衡二叉查找树,是为了防止二叉查找树沦为链表。...

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • 红黑树

    红黑树的本质就是一棵二叉查找树,所以先从二叉查找树来了解起。 二叉查找树 二叉查找树又称有序二叉树,具有以下特性:...

  • 二叉查找树

    二叉查找树,又称二叉搜索树 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: ...

网友评论

      本文标题: [lintcode]95.验证二叉查找树

      本文链接:https://www.haomeiwen.com/subject/bidjwttx.html