给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
做题分析:验证二叉搜索树,根据二叉搜索树的性质。我们可以知道二叉搜索树经过中序遍历之后得到的结果是递增的,所以我们可以在中序遍历的基础上,利用一个遍历pre用来表示上一个节点的值,如果node.val > pre,就继续,反之返回false;最后如果左子树和右子树都是true,则证明其是一个二叉搜索树。代码和运行截图如下:
class Solution {
long pre = -Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if(root == null){
return true;
}
boolean l = isValidBST(root.left);
if(root.val > pre){
pre = root.val;
}else{
return false;
}
boolean r = isValidBST(root.right);
if(l && r){
return true;
}else{
return false;
}
}
}
总结:要利用二叉搜索树独有的性质来做题,并且二叉树的dfs算法和bfs算法要能熟练手写,冲冲冲。。。