38: Validate Binary Search Tree

/************************************************************************/
        /*       38:      Validate Binary Search Tree                            */
        /************************************************************************/
        /*
         *  Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

    The left subtree of a node contains only nodes with keys less than the node's key.
    The right subtree of a node contains only nodes with keys greater than the node's key.
    Both the left and right subtrees must also be binary search trees.

confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
         *
         * */
        
        
        /*
         * 二叉搜索树:
         *
         * */
        
        /**
         * Definition for binary tree
         * public class TreeNode {
         *     int val;
         *     TreeNode left;
         *     TreeNode right;
         *     TreeNode(int x) { val = x; }
         * }
         */
        
/**1 : max(left nodes) < root&& min(right nodes)>root *******************************************/

// 当 min(left node )>root || max(right nodes)<root 时 就肯定不是了

public boolean isValidBST(TreeNode root)
        {
            return  validate(root,null,null);
        }

        boolean validate(TreeNode node, TreeNode tmin, TreeNode tmax) {
            if (node == null) return true;
            if (tmin != null && node.val <= tmin.val) return false;
            if (tmax != null && node.val >= tmax.val) return false;
            return validate(node.left, tmin, node) && validate(node.right, node, tmax);
        }
原文地址:https://www.cnblogs.com/theonemars/p/4254212.html