1. <?php
    2. Class TreeNode {
    3. /** @var int $val */
    4. public $val = 0;
    5. /** @var TreeNode $left */
    6. public $left;
    7. /** @var TreeNode $right */
    8. public $right;
    9. public function __construct($val) {
    10. $this->val = $val;
    11. }
    12. }
    13. class Solution {
    14. public array $res = [];
    15. // 是否二叉搜索树
    16. public function isValidBST($root) {
    17. return $this->valid($root, null, null);
    18. }
    19. /**
    20. * 递归判断是否二叉搜索树
    21. * 左<中<右
    22. * @param $root
    23. * @param $min
    24. * @param $max
    25. * @return bool
    26. */
    27. private function valid($root, $min, $max) {
    28. if (is_null($root)) return true;
    29. if (!is_null($min) && $root->val <= $min) return false;
    30. if (!is_null($max) && $root->val >= $max) return false;
    31. return $this->valid($root->left, $min, $root->val) && $this->valid($root->right, $root->val, $max);
    32. }
    33. }
    34. /**
    35. * 4
    36. * / \
    37. * 2 6
    38. * / \ /
    39. * 1 3 5
    40. */
    41. $tree = new TreeNode(4);
    42. $tree->left = new TreeNode(2);
    43. $tree->left->left = new TreeNode(1);
    44. $tree->left->right = new TreeNode(3);
    45. $tree->right = new TreeNode(6);
    46. $tree->right->left = new TreeNode(5);
    47. $cls = new Solution();
    48. $r = $cls->isValidBST($tree);
    49. echo $r ? 1 : 0;