LeetCode 98. Validate Binary Search Tree(校验二叉搜索树)
来源:互联网 发布:免费cms文章系统 编辑:程序博客网 时间:2024/06/07 13:45
原题网址:https://leetcode.com/problems/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.
方法一:递归+自顶向下。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { private boolean isValid = true; private void valid(TreeNode root, Check check) { if (!isValid) return; if (root == null) return; check.min = root.val; check.max = root.val; if (root.left != null) { Check left = new Check(); valid(root.left, left); check.min = left.min; if (left.max >= root.val) { isValid = false; return; } } if (!isValid) return; if (root.right != null) { Check right = new Check(); valid(root.right, right); check.max = right.max; if (right.min <= root.val) { isValid = false; return; } } } public boolean isValidBST(TreeNode root) { valid(root, new Check()); return isValid; }}class Check { int min; int max;}
方法二:递归+分治策略
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { private boolean valid(TreeNode root, int min, int max) { if (root == null) return true; if (root.val < min || root.val > max) return false; return ((root.val > Integer.MIN_VALUE && valid(root.left, min, root.val-1)) || (root.val == Integer.MIN_VALUE && root.left == null)) && ((root.val < Integer.MAX_VALUE && valid(root.right, root.val+1, max)) || (root.val == Integer.MAX_VALUE && root.right == null)); } public boolean isValidBST(TreeNode root) { return valid(root, Integer.MIN_VALUE, Integer.MAX_VALUE); }}
方法三:按照遍历顺序检查。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { TreeNode prev = null; public boolean isValidBST(TreeNode root) { if (root == null) return true; if (root.left != null) { boolean left = isValidBST(root.left); if (!left) return false; } if (prev != null && prev.val >= root.val) return false; prev = root; if (root.right != null) { boolean right = isValidBST(root.right); if (!right) return false; } return true; }}
0 0
- LeetCode 98. Validate Binary Search Tree(校验二叉搜索树)
- LeetCode--Validate Binary Search Tree(二叉搜索树)
- leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
- 【LeetCode】98. Validate Binary Search Tree 解法,中序遍历,搜索二叉树合法性
- Leetcode 98. Validate Binary Search Tree 验证二叉搜索树 解题报告
- LeetCode | Validate Binary Search Tree(有效的二叉搜索树)
- LeetCode OJ 之 Validate Binary Search Tree (验证二叉搜索树)
- 【LeetCode-面试算法经典-Java实现】【098-Validate Binary Search Tree(验证二叉搜索树)】
- LeetCode 98 Validate Binary Search Tree(判断二叉搜索树)
- LeetCode(Validate Binary Search Tree) 判断一个二叉树是否是二叉搜索树
- 判断给定二叉树是否是二叉搜索树(LeetCode: Validate Binary Search Tree)
- 98. Validate Binary Search Tree(判断合法二叉搜索树)
- [leetcode]Validate Binary Search Tree (判断有效二叉搜索树 C语言实现)
- 【判断二叉搜索树】Validate Binary Search Tree
- Validate Binary Search Tree 二叉搜索树的合法判断
- 【Leecode】207Validate Binary Search Tree有效二叉搜索树
- LeetCode | Recover Binary Search Tree(恢复二叉搜索树)
- 【LeetCode】Validate Binary Search Tree 二叉查找树的判断
- Hibernate级联查询实体关系映射
- C++ 标准函数库 —— 文件的输入输出 (Input/Output with files)
- 深入理解散列表(哈希表)
- 数据库的关系代数六大基本操作符
- MyEclipse无法启动(闪退)的一种解决
- LeetCode 98. Validate Binary Search Tree(校验二叉搜索树)
- 设计模式之工厂模式
- android-activity启动模式
- Python 线性代数 矩阵乘法
- CentOS系统 给PHP打fpm补丁时提示 -bash: patch: command not found
- redis-对Key的操作
- 用户需求和产品需求的采集、分析、筛选和管理
- Android.mk添加第三方jar包
- 毕业一年, 一个辞去年薪20+万的人