1. use recursion:

https://leetcode.com/problems/validate-binary-search-tree/

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. bool isValidBST(TreeNode* root) {
  13. return isValidBST(root, LONG_MIN, LONG_MAX);
  14. }
  15. bool isValidBST(TreeNode* root, long lower, long upper) {
  16. if (!root) return true;
  17. if(root->val <= lower || root->val >= upper)
  18. return false;
  19. return isValidBST(root->left, lower, root->val)
  20. && isValidBST(root->right, root->val, upper);
  21. }
  22. };