题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
总结
需要注意 非边界节点需要满足两个条件,大于父节点,小于祖父节点,或者小于父节点,大于祖父节点 SDC值得好好看看 SDC2把搜索二叉树用中序转换为数组,遍历判断就行了
Sample & Demo Code 1
class Solution {
public boolean isValidBST(TreeNode root
) {
return isValid(root
, null
, null
);
}
private boolean isValid(TreeNode root
, TreeNode min
, TreeNode max
) {
if(root
== null
)return true;
if((max
!=null
&& root
.val
>= max
.val
)||
(min
!=null
&& root
.val
<= min
.val
)) return false;
if(root
.left
!=null
&& !isValid(root
.left
, min
, root
))return false;
if(root
.right
!=null
&& !isValid(root
.right
, root
, max
))return false;
return true;
}
}
Sample & Demo Code 2
class Solution {
public boolean isValidBST(TreeNode root
) {
Stack
<TreeNode> stack
= new Stack();
double inorder
= - Double
.MAX_VALUE
;
while(!stack
.isEmpty() || root
!= null
) {
while(root
!= null
) {
stack
.push(root
);
root
= root
.left
;
}
root
= stack
.pop();
if(root
.val
<= inorder
) return false;
inorder
= root
.val
;
root
= root
.right
;
}
return true;
}
}
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/validate-binary-search-tree