给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
题解:若要验证是否为二叉搜索树,就要从它的特性入手,二叉搜索树若按照中序遍历的顺序及左中右,则val是单调递增的,所以此题选择中序遍历的顺序,结合双指针法,判断递归时节点的值是否后一个比前一个大。
代码如下:
class Solution {
public:
TreeNode* pre = NULL;
bool isValidBST(TreeNode* root) {
if(root == NULL) return true;
bool left = isValidBST(root->left);
if(pre!=NULL&&root->val <= pre->val) return false;
pre= root;
bool right = isValidBST(root->right);
return left&&right;
}
};
注意:
1、对于是否递增的判断,不能简单的对节点的左右进行判断,要保证左子树内所有节点都小于根节点,右子树内所有节点都大于根节点。