美文网首页
验证一个树是否二叉搜索树

验证一个树是否二叉搜索树

作者: Jimhou | 来源:发表于2019-04-18 21:48 被阅读0次
    题目需求

    给定一个二叉树,判断其是否是一个有效的二叉搜索树。
    假设一个二叉搜索树具有如下特征:
    节点的左子树只包含小于当前节点的数。
    节点的右子树只包含大于当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。

    public class GeekSolutionIsValidBST98 {
        private TreeNode preNode;
    
    /**
    中序遍历,看前一个节点是否比后一个节点小
    */
        public boolean isValidBST2(TreeNode root) {
    
    
            return inOrderValid(root);
        }
    
        private boolean inOrderValid(TreeNode root) {
    
            if (root == null) {
                return true;
            }
            if (!inOrderValid(root.left)) {
                return false;
            }
            if (preNode != null && root.val <= preNode.val) {
                return false;
            }
            preNode = root;
            return inOrderValid(root.right);
        }
    
        /**
         * 递归解法
         *
         * @param root
         * @return
         */
    
        public boolean isValidBST(TreeNode root) {
    
            return validate(root, null, null);
    
        }
    
    
        private boolean validate(TreeNode root, Integer min, Integer max) {
    
    
            if (root == null) {
                return true;
            }
    
            if ((min != null && min > root.val) || (max != null && max < root.val)) return false;
            return validate(root.left, min, root.val) && validate(root.right, root.val, max);
    
        }
    }

    相关文章

      网友评论

          本文标题:验证一个树是否二叉搜索树

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