水中的鱼: [LeetCode] Validate Binary Search Tree 解题报告



Given a binary tree, determine if it is a valid binary search tree (BST).
对于每一个子树,限制它的最大,最小值,如果超过则返回false。
对于根节点,最大最小都不限制;
每一层节点,左子树限制最大值小于根,右子树最小值大于根;
但是比较有趣的是,在递归的过程中还得不断带入祖父节点的值。

或者,中序遍历该树,然后扫描一遍看是否递增。
bool isValidBST(TreeNode *root) {
    return IsValidBST(root, INT_MIN, INT_MAX);
}
bool IsValidBST(TreeNode* node, int MIN, int MAX)  
{
    if(node == NULL)
          return true;
    if(node->val > MIN  
              && node->val < MAX
              && IsValidBST(node->left,MIN,node->val)
              && IsValidBST(node->right,node->val,MAX))
         return true;
    else  
         return false;
}
From: http://yucoding.blogspot.com/2013/02/leetcode-question-122-validate-binary.html
    void inOrder(TreeNode* root, int &pre, bool &res){
        if (!root || !res ){return;}
        inOrder(root->left,pre,res);
        if (pre>=root->val){
            res = false; return;
        }else{
            pre = root->val;
        }
        inOrder(root->right,pre,res);
    }
 
    bool isValidBST(TreeNode *root) {
        if (!root){return true;}
        int pre = INT_MIN;
        bool res=true;
        inOrder(root,pre,res);
        return res;
    }
Read full article from 水中的鱼: [LeetCode] Validate Binary Search Tree 解题报告

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts