一、题意
二、思考过程
一棵二叉搜索树的特征如下:
- 节点的左子树只包含小于当前节点的数
- 节点的右子树只包含大于当前节点的数
- 所有左子树和右子树自身必须也是二叉搜索树
我们要比较的就是左子树所有节点小于中间节点,右子树所有节点大于中间节点。
验证二叉搜索树就是相当于判断一个序列是不是递增,是不是中序遍历。
class Solution { public: TreeNode *pre=NULL;//记录前一个节点 bool isValidBST(TreeNode* root) { if(root==NULL) return true;//空树是二叉排序树 bool left=isValidBST(root->left); // 访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回 false;否则继续遍历。 if (pre!=NULL && root->val <= pre->val) return false; pre=root;//记录前一个节点 bool right=isValidBST(root->right); return left&&right; } };