LeetCode 98:Validate Binary Search Tree

题意描述

给定一个二叉树,请确定它是否为有效的二叉树(BST)。

二叉树定义:

  • 节点的左子树仅包含键值小于节点键值的节点。
  • 节点的右子树仅包含键大于该节点的键的节点。
  • 左子树和右子树都必须也是二进制搜索树。

解题思路

一、递归

    public boolean isValidBST(TreeNode root) {
            return isBST(root,Long.MAX_VALUE,Long.MIN_VALUE);
        }
        private boolean isBST(TreeNode root,long max,long min){
            if(root == null) return true;
            if(root.val >= max || root.val <= min) return false;
            //向左递归,当前节点值为最大值
            //向右递归,当前节点值为最小值
            return isBST(root.left,root.val,min) && isBST(root.right,max,root.val);
        }

二、非递归

    public static boolean isValidBST_2(TreeNode root) {
            if (root == null) return true;
            Stack<TreeNode> stack = new Stack<>();
            TreeNode pre = null;	//指向上一个遍历的节点
            while (root != null || !stack.isEmpty()) {
                //左子节点入栈
                while (root != null) {
                    stack.push(root);
                    root = root.left;
                }
                root = stack.pop();
                //中序遍历,逐个比较节点值
                if (pre != null && root.val <= pre.val)
                    return false;
                pre = root;
                root = root.right;
            }
            return true;
        }

猜你喜欢

转载自www.cnblogs.com/le-le/p/12920358.html