Validate Binary Search Tree [LeetCode]

 

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.
 1     bool varifyBST(TreeNode * root, int * out_min, int * out_max) {

 2         if(root == NULL)

 3             return true;

 4         (*out_min) = root->val;

 5         (*out_max) = root->val;

 6         if(root->left == NULL && root->right == NULL)

 7             return true;

 8         

 9         int vmax = root->val;

10         int vmin = root->val;

11         if(root->left != NULL){

12             bool ret = varifyBST(root->left, &vmin, &vmax);

13             if(ret == false)

14                 return false;

15             if(vmax >= root->val)

16                 return false;

17             (*out_min) = min(vmin, root->val);

18         }

19         

20         if(root->right != NULL){

21             bool ret = varifyBST(root->right, &vmin, &vmax);

22             if(ret == false)

23                 return false;

24             if(vmin <= root->val)

25                 return false;

26             (*out_max) = max(vmax, root->val);

27         }

28         return true;

29     }

30     

31     bool isValidBST(TreeNode *root) {

32         int vmax = 0;

33         int vmin = 0;

34         return varifyBST(root, &vmin, &vmax);

35     }

 

你可能感兴趣的:(Binary search)