LintCode:验证二叉查找树

描述

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

一棵BST定义为:

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

样例

一个例子:

  2
 / \
1   4
   / \
  3   5

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

思路: 分治法,递归判断当前以当前节点为根的数是不是二叉查找树,但是这里有一个注意点,就是左子树的所有节点都需要小于原始根节点的值,而不是只是比父节点小就可以了,同理,右子树也是一样的道理。

Java代码:

public boolean isValidBST(TreeNode root) {
        // write your code here
        return divConq(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }
    public boolean divConq(TreeNode root, long min, long max){
        if(root == null){
            return true;
        }
        if(root.val > max || root.val < min){
            return false;
        }
        return divConq(root.left, min, Math.max(min, root.val))
            & divConq(root.right, Math.min(max, root.val), max);
    }

    原文作者:二叉查找树
    原文地址: https://blog.csdn.net/u012156116/article/details/80813065
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞