题意
验证一个二叉树是不是二叉搜索树
test cases
[1,1,3]
[]
[5,1,4,null,null,3,6]
[10,5,15,null,null,6,20]
[2147483647]
递归一个二叉树,是否是在min,max间的二叉搜索树。
解1
public boolean isValidBST(TreeNode root
) {
return isValidBST(root
, Integer
.MIN_VALUE
, Integer
.MAX_VALUE
);
}
public boolean isValidBST(TreeNode node
, int min
, int max
) {
if (node
== null
)
return true;
if (node
.left
!= null
&& node
.right
!= null
)
return node
.val
>= min
&& node
.val
<= max
&& isValidBST(node
.left
, min
, node
.val
- 1)
&& isValidBST(node
.right
, node
.val
+ 1, max
)
&& node
.val
> node
.left
.val
&& node
.val
< node
.right
.val
;
if (node
.left
!= null
)
return node
.val
>= min
&& node
.val
<= max
&& isValidBST(node
.left
, min
, node
.val
- 1)
&& node
.val
> node
.left
.val
;
if (node
.right
!= null
)
return node
.val
>= min
&& node
.val
<= max
&& isValidBST(node
.right
, node
.val
+ 1, max
)
&& node
.val
< node
.right
.val
;
return node
.val
>= min
&& node
.val
<= max
;
}
解2
思路一样,优化代码
public boolean isValidBST(TreeNode root
) {
return helper(root
, null
, null
);
}
private boolean helper(TreeNode root
, Integer l
, Integer r
){
if(root
== null
){
return true;
}
if(l
!= null
&& root
.val
<= l
){
return false;
}
if(r
!= null
&& root
.val
>= r
){
return false;
}
return helper(root
.left
, l
, root
.val
) && helper(root
.right
, root
.val
, r
);
}