|
| 1 | +# 98. 验证二叉搜索树 |
| 2 | + |
| 3 | +[url](https://leetcode-cn.com/problems/unique-binary-search-trees/) |
| 4 | + |
| 5 | +## 题目 |
| 6 | + |
| 7 | +给定一个二叉树,判断其是否是一个有效的二叉搜索树。 |
| 8 | + |
| 9 | +假设一个二叉搜索树具有如下特征: |
| 10 | + |
| 11 | +- 节点的左子树只包含小于当前节点的数。 |
| 12 | +- 节点的右子树只包含大于当前节点的数。 |
| 13 | +- 所有左子树和右子树自身必须也是二叉搜索树。 |
| 14 | + |
| 15 | + |
| 16 | +``` |
| 17 | +输入: |
| 18 | + 2 |
| 19 | + / \ |
| 20 | + 1 3 |
| 21 | +输出: true |
| 22 | +输入: |
| 23 | + 5 |
| 24 | + / \ |
| 25 | + 1 4 |
| 26 | + / \ |
| 27 | + 3 6 |
| 28 | +输出: false |
| 29 | +解释: 输入为: [5,1,4,null,null,3,6]。 |
| 30 | + 根节点的值为 5 ,但是其右子节点值为 4 。 |
| 31 | +``` |
| 32 | + |
| 33 | +## 方法 |
| 34 | + |
| 35 | + |
| 36 | +## code |
| 37 | + |
| 38 | +### js |
| 39 | + |
| 40 | +```js |
| 41 | +let isValidBST = root => { |
| 42 | + let validate = (node, min, max) => { |
| 43 | + if (node === null) |
| 44 | + return true; |
| 45 | + if (node.val <= min || node.val >= max) |
| 46 | + return false; |
| 47 | + return validate(node.left, min, node.val) && validate(node.right, node.val, max); |
| 48 | + } |
| 49 | + return validate(root, Number.MIN_VALUE, Number.MAX_VALUE); |
| 50 | +} |
| 51 | +``` |
| 52 | + |
| 53 | +### go |
| 54 | + |
| 55 | +```go |
| 56 | +func isValidBST(root *TreeNode) bool { |
| 57 | + const INT_MAX = int(^uint(0) >> 1) |
| 58 | + const INT_MIN = ^INT_MAX |
| 59 | + var validate func(node *TreeNode, min, max int) bool |
| 60 | + validate = func(node *TreeNode, min, max int) bool { |
| 61 | + if node == nil { |
| 62 | + return true |
| 63 | + } |
| 64 | + if node.Val <= min || node.Val >= max { |
| 65 | + return false |
| 66 | + } |
| 67 | + return validate(node.Left, min, node.Val) && validate(node.Right, node.Val, max) |
| 68 | + } |
| 69 | + return validate(root, INT_MIN, INT_MAX) |
| 70 | +} |
| 71 | +``` |
| 72 | + |
| 73 | +### java |
| 74 | + |
| 75 | +```java |
| 76 | +class Solution { |
| 77 | + public boolean isValidBST(TreeNode root) { |
| 78 | + return validate(root, Long.MIN_VALUE, Long.MAX_VALUE); |
| 79 | + } |
| 80 | + |
| 81 | + public boolean validate(TreeNode node, long min, long max) { |
| 82 | + if (node == null) |
| 83 | + return true; |
| 84 | + if (node.val <= min || node.val >= max) |
| 85 | + return false; |
| 86 | + return validate(node.left, min, node.val) && validate(node.right, node.val, max); |
| 87 | + } |
| 88 | +} |
| 89 | +``` |
| 90 | + |
0 commit comments