美文网首页二叉树之下
LintCode - 验证二叉查找树(中等)

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

作者: 柒黍 | 来源:发表于2017-09-16 22:16 被阅读226次

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:入门
要求:

给定一个二叉树,判断它是否是合法的二叉查找树(BST)

一棵BST定义为:

节点的左子树中的值要严格小于该节点的值。
节点的右子树中的值要严格大于该节点的值。
左右子树也必须是二叉查找树。
一个节点的树也是二叉查找树。

样例:

一个例子:

  2
 / \
1   4
   / \
  3   5

上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.

思路:

方法一: 根据定义递归验证
方法二: 二叉查找树中序遍历可以得到一个递增的序列

这里我们实现方法二:

/**
 * 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) {
        List<Integer> list = new ArrayList<Integer>();

        //遍历
        inOrder(root, list);

        //校验
        boolean flag = true;
        int cur = Integer.MIN_VALUE;
        if(list.size() > 0){
            cur = list.get(0);
            list.remove(0);
        }
        for(int i : list){
            if(i <= cur){
                flag = false;
                break;
            }else{
                cur = i;
            }
        }
        return flag;
    }
    
    /**
     * 二叉查找树中序遍历可以得到一个递增的序列
     * 
     **/
    private void inOrder(TreeNode node, List<Integer> list){
        if(node == null){
            return;
        }
        
        inOrder(node.left, list);
        list.add(node.val);
        inOrder(node.right, list);
        return;
    }
}

相关文章

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

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

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

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

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

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

  • LintCode 95. 验证二叉查找树

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

  • [LeetCode OJ]- Valid Binary Sea

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

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

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

  • 二叉查找树

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

  • 红黑树

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

  • 二叉查找树

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

  • 99-数据结构和算法

    难点:二叉树的遍历 红黑树 图的遍历 二叉查找树二叉查找树(binary search tree),二叉查找树在二...

网友评论

    本文标题:LintCode - 验证二叉查找树(中等)

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