Data structures 为什么查找给定的二叉树是否为BST需要static关键字?

Data structures 为什么查找给定的二叉树是否为BST需要static关键字?,data-structures,static,binary-tree,binary-search-tree,Data Structures,Static,Binary Tree,Binary Search Tree,以下是查找给定二叉树是否为二叉搜索树(BST)的代码: bool-isBST(结构节点*根) { //按顺序遍历树并跟踪上一个节点 如果(根) { 结构节点*prev=NULL; 如果(!isBST(根->左)) 返回false; //仅允许不同值的节点 if(prev!=NULL&&root->data) 返回false; prev=根; 返回isBST(根->右); } 返回true; } 但是,这并不能提供正确的输出。 当我将代码更改为以下版本时,它运行良好: bool isbst(no

以下是查找给定二叉树是否为二叉搜索树(BST)的代码:

bool-isBST(结构节点*根)
{
//按顺序遍历树并跟踪上一个节点
如果(根)
{
结构节点*prev=NULL;
如果(!isBST(根->左))
返回false;
//仅允许不同值的节点
if(prev!=NULL&&root->data)
返回false;
prev=根;
返回isBST(根->右);
}
返回true;
}
但是,这并不能提供正确的输出。 当我将代码更改为以下版本时,它运行良好:

bool isbst(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;
}
bool-isbst(节点*根)
{
静态结构节点*prev=NULL;
如果(根)
{
如果(!isbst(根->左))
返回false;
if(prev!=NULL&&root->datadata)
返回false;
prev=根;
返回isbst(根->右);
}
返回true;
}
我的问题是,当行
static struct node*prev=NULL时,它为什么工作是否已添加到代码中

在我以前的代码中,即使变量'prev'被一次又一次地声明,每次它都会更新到根目录中..我的代码应该工作得很好。但事实并非如此。怎么了

static struct node * prev = NULL;
在上一行中,使用static关键字会导致两件事: 1) prev仅初始化为null一次,即第一次到达时
2) 更重要的是,由于prev是静态的,因此对其值的任何更新都将保留在对函数isBST的后续调用中

在没有static关键字的初始/错误/非工作情况下

struct node *prev = NULL;
1) 您没有保留上一个节点的值(这正是您的算法无法工作的原因) 2) 不仅如此,您还将其设置为null

简而言之,通过使用static,您将保留前一个节点的值(您的意图)。在另一种情况下,不保留上一个节点的值

<>强> C++中函数范围内变量的静态初始化是一种在递归调用之间保留值的好方法。< /强>

struct node *prev = NULL;