Thursday, February 28, 2013

Validate Binary Search Tree


/*

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 isValidBST(TreeNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int currValue = -200000;
        TreeNode *node = root;
        stack<TreeNode*> s;
       
        while(node!=NULL || !s.empty()){
            if(node!=NULL){
                s.push(node);
                node = node->left;
            }
            else{
                node = s.top();
                s.pop();
                if(node->val <= currValue) return false;
                currValue = node->val;
                node = node->right;
            }
        }
       
        return true;
    }
};

No comments:

Post a Comment