/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Checker { public: bool checkBST(TreeNode* root) { return checkBST(root, INT_MIN, INT_MAX); } bool checkBST(TreeNode* root, int leftVal, int rightVal){ if(root->val > leftVal && root->val < rightVal){ if(root->left){ if(!checkBST(root->left, leftVal, root->val)) return false; } if(root->right){ if(!checkBST(root->right,root->val, rightVal)) return false; } return true; } return false; } };
第二種,這種比較抽象,須要再思考一下函數
TreeNode* pre = NULL; bool checkBST(TreeNode* root) { if(Inorder(root)!=NULL) return false; return true; } TreeNode* Inorder(TreeNode *root) { if(root==NULL) return NULL; TreeNode* left=Inorder(root->left); if(left!=NULL) return left; if(pre!=NULL&&pre->val>root->val) return root; pre = root; TreeNode *right=Inorder(root->right); if(right!=NULL) return right; return NULL; }