来源Leetcode第98题验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
错误的思路
做的时候忘记判断当前结点的左子树数据是否大于上一结点的数据了,最终在第70/75个用例时出错
错误的代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public boolean isValidBST(TreeNode root) {
if(root == null)
return true;
if(root.left == null && root.right == null)
return true;
if(root.left == null && root.right != null)
return root.val< root.right.val && isValidBST(root.right);
if(root.left != null && root.right == null)
return root.val > root.left.val && isValidBST(root.left);
return root.val > root.left.val && root.val< root.right.val && isValidBST(root.left) && isValidBST(root.right);
}
递归
来源题解
首先将结点的值与上界和下界(如果有)比较。然后,对左子树和右子树递归进行该过程。
1 | public boolean helper(TreeNode node, Integer lower, Integer upper) { |
中序遍历迭代
利用中序遍历来判断是否是二叉搜索树
1 | class Solution { |
中序遍历递归
1 | double last = -Double.MAX_VALUE; |