因此,问题是在二叉树中找到最大的子树(最大的子树是具有最大大小的节点),这是一个BST。
我找到了以下网站,其中包含一个算法。
http://amazoninterview.blogspot.in/2011/10/find-largest-binary-search-tree-in.html
现在重复执行上述代码后,我发现它给出了正确的结果。但是,我发现(通过干运行和直觉)而不是它分配的位置(int函数getmaxbst(),
subtreemin = leftsubtreemin;
subtreemax = rightsubtreemax;
应该执行以下操作
subtreemin = leftsubtreemax;
subtreemax = rightsubtreemin;
我尝试使用上述更改执行代码,它提供了相同且正确的结果。
有人可以帮我找出上述哪项是正确的,为什么
答案 0 :(得分:0)
原始算法分配是正确的。
'subtreemin'和'subtreemax'是'getmaxbst'函数的参数,并通过引用传递。当赋值这些变量时,它也会改变传递给函数的变量,即leftsubtree min / max或rightubtree min / max。因为在赋值点已经确定子树实际上是BST,所以树的最小值将是左子树的最小值(即leftsubtreemin),并且树的最大值将是最大的右子树的值(rightsubtreemax)。
我相信你的错误在于认为'subtreemin'和'subtreemax'被用作比较以确定子树实际上是否是BST,但是这是用不同的变量(即leftsubtreemax和rightsubtreemin)来完成的。
if(root->data < leftsubtreemax ||
root->data > rightsubtreemin){
return -1;
至于为什么两者都产生类似和正确的结果,我不能在不查看数据的情况下告诉你,但是看起来更改分配会产生错误的结果。对于某些测试用例,您可能会很幸运。