使用中序遍历
中序 遍历是一个有序数列 可以利用这个性质
class Solution {
TreeNode max;
// 递归
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
// 左
boolean left = isValidBST(root.left);
if (!left) {
return false;
}
// 中
if (max != null && root.val <= max.val) {
return false;
}
max = root;
// 右
boolean right = isValidBST(root.right);
return right;
}
}
陷阱 :
不能只判断当前节点的左右节点小于和大于当前节点的数值
例如如下代码
if((root.right != null && root.val > root.right.val) ||(root.left != null && root.val < root.left.val) ){
return false;
}
并不能保证 这是一个正确的二叉树