# 98-Validate Binary Search Tree ###### tags: `Medium` * Question: https://leetcode.com/problems/validate-binary-search-tree/ * Hint: 1. 與recover BST用到概念類似,進行左右子樹迭帶,並檢查左<根?->移動節點->根<右? 2. 利用最小和最大值來代表要比較的兩個節點,注意遞迴時,左右子樹參數代入誰,用到的變數比recover BST少 3. DFS * Reference: 觀念: https://ithelp.ithome.com.tw/articles/10213279 code: https://ithelp.ithome.com.tw/articles/10278114?sc=hot ## Solution I ```cpp= /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool isValidBST(TreeNode* root) { return frule(root, NULL, NULL); } private: bool frule(TreeNode* cur, TreeNode* mini, TreeNode* maxi) { if (!cur) return true; if ( mini ) if ( cur->val <= mini->val ) return false; if ( maxi ) if ( cur->val >= maxi->val) return false; return frule(cur->left, mini, cur) && frule(cur->right, cur, maxi); } }; ``` ## Solution using DFS ```cpp= class Solution { public: bool isvalid(TreeNode* root,long long minVal,long long maxVal){ if(root==NULL) return true; if(root->val>=maxVal|| root->val<=minVal) return false; return isvalid(root->left,minVal,root->val)&& isvalid(root->right,root->val,maxVal); } bool isValidBST(TreeNode* root) { return isvalid(root,LONG_MIN,LONG_MAX); } }; ```