C++ 二叉树中最大的BST使用后序遍历获取错误

C++ 二叉树中最大的BST使用后序遍历获取错误,c++,data-structures,tree,binary-tree,binary-search-tree,C++,Data Structures,Tree,Binary Tree,Binary Search Tree,在下面的代码中,根包含我们树的根,和包含我们的结果。 这段代码对我来说似乎很好,但当我在上提交它时,它给出了错误,请帮助 int po(Node *root,int &sum){ if(root==NULL) return 0; int p=po(root->left,sum); int q=po(root->right,sum); int r=1,t=1; if(root->left!=NULL && root->data <=ro

在下面的代码中,包含我们树的包含我们的结果。 这段代码对我来说似乎很好,但当我在上提交它时,它给出了错误,请帮助

int po(Node *root,int &sum){

if(root==NULL) return 0;

int p=po(root->left,sum);
int q=po(root->right,sum);

int r=1,t=1;

if(root->left!=NULL && root->data <=root->left->data) r=0;
if(root->right!=NULL  && root->data >= root->right->data) t=0;

if( (r&t) == 1 && p!=-1 && q!=-1) { 
     if(p+q+ 1>sum)
        sum=p+q+ 1;
    return p+q+ 1;
}
else
return -1;}
int-po(节点*root、int和sum){
if(root==NULL)返回0;
INTP=po(根->左,和);
int q=po(根->右,和);
int r=1,t=1;
如果(root->left!=NULL&&root->data left->data)r=0;
如果(root->right!=NULL&&root->data>=root->right->data)t=0;
如果((r&t)==1&&p!=-1&&q!=-1){
如果(p+q+1>总和)
总和=p+q+1;
返回p+q+1;
}
其他的
返回-1;}

显示的与子树是否为BST相关的逻辑存在根本性缺陷,这就是问题所在。你需要从头开始重新实现它。确定子树是否是BST并不是那么简单。为此还需要做更多的工作,比如跟踪子树中的最小值和最大值。只有这样,才能评估给定节点是否构成BST。你能告诉我它缺少哪个测试用例吗?不幸的是,我不是该网站的系统管理员,所以我无法知道这一点。只有他们知道他们在使用哪些测试用例。我可以说这是根本上有缺陷的,因为我知道如何递归地确定树是否满足BST的要求,而显示的逻辑是不正确的。这不是一个选择特定方法的问题。要递归地评估树是否形成BST,必须实现所示代码中完全缺少的逻辑。例如,代码将以下树视为BST:
2->left 1->right 3
。但它不是BST-在BST中,左子树中的所有元素都小于根。