Tree 使用顺序检查BST
我遇到了下面的代码来检查树是否为BST。 请解释使用prev指针的目的以及根数据和prev->data之间的关系。Tree 使用顺序检查BST,tree,binary-search-tree,Tree,Binary Search Tree,我遇到了下面的代码来检查树是否为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-
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;
}
bool-isBST(结构节点*根)
{
静态结构节点*prev=NULL;
//按顺序遍历树并跟踪上一个节点
如果(根)
{
如果(!isBST(根->左))
返回false;
//仅允许不同值的节点
if(prev!=NULL&&root->data)
返回false;
prev=根;
返回isBST(根->右);
}
返回true;
}
顺序遍历的基本定义是
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;
}
因此,在代码中,在遍历过程中,会保存上一个节点以将其与当前节点进行比较。比较时,当前节点的数据应严格大于前一个节点的数据,因为遍历给出了升序。这就是使用以下条件的原因
if (prev != NULL && root->data <= prev->data)
return false;
if(prev!=NULL&&root->data)
返回false;
如果当前节点的数据(根->数据)小于或等于上一个节点的数据(上一个->数据),则树不是BST