二叉查找树的特点是结点的值大于其左孩子的值,小于其右孩子的值,因此我们可以使用中序遍历,这样遍历得到的元素的值是依次增大的,所以我们只需在中序遍历的时候判断当前结点的值是否大于前一个结点的值(可以使用一个pre指针跟踪当前节点的前一个结点)。
bool isBST(struct node* root)
{
static struct node *prev = NULL;
// 中序遍历树并记录前驱结点
if (root)
{
if (!isBST(root->left))
return false;
if (prev != NULL && root->data <= prev->data)
return false;
prev = root;
return isBST(root->right);
}
return true;
}