zoukankan      html  css  js  c++  java
  • LeetCode_Validate Binary Search Tree

    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.
    

      思路:中序遍历的结果正好是二分查找树对应的数据的顺序,所以先中序遍历数据,然后检查遍历的结果是不是递增的

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        bool check(vector<int> &a)
        {
            if(a.size() == 1) return true;
            for(int i = 1; i< a.size(); i++)
              if(a[i] <= a[i-1])
                    return false;
            return true;
       }
        bool isValidBST(TreeNode *root) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            if(root == NULL ) return true ;
            vector<int> inorder ;
            stack<TreeNode *> myS;
           // myS.push(root);
            TreeNode *p = root;
            while(!myS.empty()||p){
               while(p){
                 myS.push(p);
                 p = p->left;
               }
               p = myS.top();myS.pop();
               inorder.push_back(p->val) ;
               p = p->right ;
            }
            
            return check(inorder) ;
            
        }
    };

     改进版本:访问每个数据的时候就进行检查,奇怪的是小数据时时间减小一半,大数据竟然比上面的用时还要多

     bool isValidBST(TreeNode *root) {
            // Start typing your C/C++ solution below
            // DO NOT write int main() function
            if(root == NULL ) return true ;
    
            stack<TreeNode *> myS;
           // myS.push(root);
            TreeNode *p = root;
            int flag = 0;
            int value ;
            while(!myS.empty()||p){
               while(p){
                 myS.push(p);
                 p = p->left;
               }
               p = myS.top();
               myS.pop();
              
               if(flag){
                   
                  if( p->val <= value)
                      return false;
                   
               }else{
                   
                   flag = 1;
                 
               }
               value  = p->val;
               p = p->right ;
            }
            return true ;
            
        }
    --------------------------------------------------------------------天道酬勤!
  • 相关阅读:
    lr http_get访问webservice
    lr http_post请求webservice
    快速幂(fast power)
    运算符重载
    1010 Radix 二分
    1054 The Dominant Color
    1042 Shuffling Machine
    1059 Prime Factors
    1061 Dating
    1078 Hashing
  • 原文地址:https://www.cnblogs.com/graph/p/3024428.html
Copyright © 2011-2022 走看看