Microsoft Interview Question
Software Engineer / Developersbool IsBst(Node n) {
if (n == null) return true;
if (n.left != null && n.right != null) {
if (n.val < n.left.val || n.val > n.right.val) return false;
} else {
if (n.left != null) {
if (n.val < n.left.val) return false;
} else {
if (n.right != null) {
if (n.val > n.right.val) return false;
} else
return true;
}
}
return IsBst(n.left) && IsBst(n.right);
}
O(n) - time & space (use of stack)
does not work, consider:
10
6 12
5 15 11 13
the subtree of 6-5-15 will return true, but clearly it violates the basis of a BST given 15 > 10.
bool isBST(Node * ptr)
{
if (ptr==NULL) return TRUE;
if (ptr->right == NULL && isBST(ptr->left) && ptr->value > ptr->left->value )return TRUE;
if (ptr->left == NULL && isBST(ptr->right) && ptr->value < ptr->left->value )return TRUE;
if(isBST(ptr->left)&& isBST(ptr->right) && ptr->value > ptr->left->value && ptr->value < ptr->left->value) return TRUE;
return FALSE;
}
bool isBST(Node * ptr)
{
if (ptr==NULL) return TRUE;
if (ptr->right == NULL && isBST(ptr->left) && ptr->value > ptr->left->value )return TRUE;
if (ptr->left == NULL && isBST(ptr->right) && ptr->value < ptr->right->value )return TRUE;
if(isBST(ptr->left)&& isBST(ptr->right) && ptr->value > ptr->left->value && ptr->value < ptr->left->value) return TRUE;
return FALSE;
}
- Vir Pratap Uttam May 05, 2015