首页 > 其他 > 详细

LeetCode 98:Validate Binary Search Tree

时间:2020-05-20 00:31:42      阅读:46      评论:0      收藏:0      [点我收藏+]

题意描述

给定一个二叉树,请确定它是否为有效的二叉树(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;
        }

LeetCode 98:Validate Binary Search Tree

原文:https://www.cnblogs.com/le-le/p/12920358.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!