Validate Binary Search Tree
Description
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.
A single node tree is a BST
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
class ResultType{
boolean is_bst ;
int minValue,maxValue ;
public ResultType(boolean is_bst , int minValue , int maxValue){
this.is_bst = is_bst ;
this.minValue = minValue ;
this.maxValue = maxValue ;
}
}
public class Solution {
/**
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
public boolean isValidBST(TreeNode root) {
// write your code here
ResultType result = helper(root) ;
return result.is_bst ;
}
public ResultType helper(TreeNode root){
if(root == null){
return new ResultType(true , Integer.MAX_VALUE ,Integer.MIN_VALUE );
}
ResultType left = helper(root.left);
ResultType right = helper(root.right);
if(! left.is_bst || ! right.is_bst){
return new ResultType(false , 0 ,0 );
}
if(root.left != null && left.maxValue >= root.val || root.right != null && right.minValue <= root.val){
return new ResultType(false , 0 ,0 );
}
return new ResultType(true , Math.min(root.val , left.minValue) ,Math.max(root.val , right.maxValue) );
}
}
该博客讨论了一种算法,用于检查给定的二叉树是否符合二叉搜索树的定义。二叉搜索树的特性是左子树上的节点值小于根节点,右子树上的节点值大于根节点。解决方案中,`isValidBST`方法通过递归地检查每个子树来确定整个树是否有效,并使用`helper`辅助函数来更新最小值和最大值。如果在递归过程中发现违反了二叉搜索树的规则,返回false;否则返回true。
895

被折叠的 条评论
为什么被折叠?



