Ejemplo n.º 1
0
    Result isBSTHelper(TreeNode* root)

    {

        if (NULL == root)

        {

            return Result(true, 0, 0);

        }

        Result leftR = isBSTHelper(root->left);

        Result rightR = isBSTHelper(root->right);

        if (leftR.isBST && rightR.isBST && 

                (NULL == root->left || leftR.maxV < root->val) && 

                (NULL == root->right || rightR.minV > root->val))

        {

            int minV = NULL == root->left ? root->val : leftR.minV;

            int maxV = NULL == root->right ? root->val : rightR.maxV;

            return Result(true, minV, maxV);

        }

        return Result(false, 0, 0);

    }
Ejemplo n.º 2
0
bool BST::isBSTHelper(Node *node){
	if(node->left == NULL && node-> right == NULL){
		return true;
	}
	else if(node->left && node-> right){
		if(node->left->data < node->data && node->right->data > node->data){
			return isBSTHelper(node->left) && isBSTHelper(node->right);
		}
	}
	else if(node->left && (node-> right)){
		if(node->left->data < node->data){
			return isBSTHelper(node->left);
		}
		else {
			return false;
		}
	}
	else if(!(node->left) && node-> right){
		if(node->right->data > node->data){
					return isBSTHelper(node->right);
				}
				else {
					return false;
				}
	}
	return true;
}
Ejemplo n.º 3
0
bool isBSTHelper(TreeNode *node, int minVal, int maxVal) {
	if (node == NULL) 
		return true;
	else if (node->val <= minVal || node->val >= maxVal)
		return false;
	else 
		return isBSTHelper(node->left, minVal, node->val) && isBSTHelper(node->right, node->val, maxVal);
}
Ejemplo n.º 4
0
/* returns 1 if each node has data >= min and <= max
 */
int isBSTHelper(Node *node, int min, int max)
{
    /* base case 1: an empty tree is a well-formed BST */
    if (node == NULL)
        return 1;
    
    /* base case 2: tree is not well formed */
    if (node->data < min || node->data > max) {
        return 0;
    }
    
    /* recursively check all the nodes, left and right */
    return
        isBSTHelper(node->left, min, node->data - 1) &&
        isBSTHelper(node->right, node->data+1, max);
}
Ejemplo n.º 5
0
bool isBSTHelper(TreeNode* root, int& prev) {
	if (!root) return true;
	if (!(isBSTHelper(root->left, prev))) {
		std::cout << "1" << std::endl;
		return false;
	}
	if (!((root->val> prev) && (prev = root->val))) {
		
		std::cout << "2" << std::endl;
		return false;
	}
	if (!isBSTHelper(root->right, prev)) {
		std::cout << "3" << std::endl;
		return false;
	}
	return true;
}
Ejemplo n.º 6
0
int treeIsWellformed(void)
{
    /* checks whether the tree is well-formed */
    Node *currentNode;
    
    currentNode = root;
    
    return isBSTHelper(currentNode, INT_MIN, INT_MAX);
}
Ejemplo n.º 7
0
//Check if a given tree is a BST
bool BST::isBST(){
	if(root == NULL){
		cout<<endl<<"Empty tree"<<endl;
		return true;
	}
	else{
		return isBSTHelper(root);
	}
}
Ejemplo n.º 8
0
    bool isValidBST(TreeNode *root) {

        // write your code here


        return isBSTHelper(root).isBST;



    }
Ejemplo n.º 9
0
bool isValidBST(TreeNode *root) {
	return isBSTHelper(root, INT_MIN, INT_MAX);   
}
Ejemplo n.º 10
0
bool isBST(TreeNode *root) {
	int prev = INT_MIN;
	return isBSTHelper(root, prev);
}
Ejemplo n.º 11
0
 bool isBSTHelper(TreeNode *root, int rangeBegin, int rangeEnd) {
     if (!root) return true;
     if (root->val <= rangeBegin || root->val >= rangeEnd) return false;
     return isBSTHelper(root->left, rangeBegin, root->val) && isBSTHelper(root->right, root->val, rangeEnd);
 }