一:解题思路
确定根节点的上下界进行不断的传递下去进行判断是否为二叉搜索树。Time:O(n),Space:O(n)
二:完整代码示例 (C++版和Java版)
C++:
class Solution { private: bool isValidBST(TreeNode* root, TreeNode* lower, TreeNode* upper) { if (root == NULL) return true; if (lower != NULL && root->val <= lower->val) return false; if (upper != NULL && root->val >= upper->val) return false; return isValidBST(root->left, lower, root) && isValidBST(root->right,root,upper); } public: bool isValidBST(TreeNode* root) { return isValidBST(root,NULL,NULL); } };
Java:
class Solution { private boolean isValidBST(TreeNode root,TreeNode lower,TreeNode upper) { if(root==null) return true; if(lower!=null && root.val<=lower.val) return false; if(upper!=null && root.val>=upper.val) return false; return isValidBST(root.left,lower,root) && isValidBST(root.right,root,upper); } public boolean isValidBST(TreeNode root) { return isValidBST(root,null,null); } }