我遇到了以下代码,以检查树是否为BST。 请说明使用prev指针的目的以及根数据与prev-> data之间的关系。
bool isBST(struct node* root)
{
static struct node *prev = NULL;
// traverse the tree in inorder fashion and keep track of prev node
if (root)
{
if (!isBST(root->left))
return false;
// Allows only distinct valued nodes
if (prev != NULL && root->data <= prev->data)
return false;
prev = root;
return isBST(root->right);
}
return true;
}
答案 0 :(得分:0)
顺序遍历的基本定义是
让我们以BST为例。
对于上面的树,顺序遍历为[2,5,6,8,10,13,15,19]。基本上,BST的顺序遍历使我们可以按升序排列
。因此,在您的代码中,遍历期间将保存前一个节点以将其与当前节点进行比较。比较时,当前节点的数据应严格大于前一节点的数据,因为遍历给出了升序。这就是为什么使用以下条件的原因。
if (prev != NULL && root->data <= prev->data)
return false;
如果当前节点的数据(root-> data)小于或等于前一个节点的数据(prev-> data),则该树不是BST。