5月打卡活动第5天 LeetCode第98题:验证二叉搜索树(中等)
-
题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
-
解题思路:应该用动态规划,知道自己的问题在哪里,只判断了最右侧和左侧,中间的都没有判断。
class Solution {
public boolean isValidBST(TreeNode root) {
boolean ans = true;
if(root == null) return true;
int mid = root.val;
while(ans){
if(root.left != null && root.left.val>=root.val) return false;
if(root.right != null && root.right.val<=root.val) return false;
if(root.left != null && root.val != mid && root.left.val<=mid) return false;
if(root.left == null && root.right == null) break;
if(root.right != null){
mid = root.val;
root = root.right;
}else{
break;
}
}
while(ans){
if(root.left != null && root.left.val>=root.val) return false;
if(root.right != null && root.right.val<=root.val) return false;
if(root.right != null && root.val != mid && root.right.val>=mid) return false;
if(root.left == null && root.right == null) break;
if(root.left != null){
mid = root.val;
root = root.left;
}else{
break;
}
}
return ans;
}
}
- 题解做法:中序遍历,想到了用递归。。。试试好啦。。
class Solution {
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
// 访问左子树
if (!isValidBST(root.left)) {
return false;
}
// 访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回 false;否则继续遍历。
if (root.val <= pre) {
return false;
}
pre = root.val;
// 访问右子树
return isValidBST(root.right);
}
}
作者:sweetiee
链接:https://leetcode-cn.com/problems/validate-binary-search-tree/solution/zhong-xu-bian-li-qing-song-na-xia-bi-xu-miao-dong-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。