二叉树中最大的二叉搜索树

时间:2013-07-08 12:40:32

标签: c++ binary-search-tree

因此,问题是在二叉树中找到最大的子树(最大的子树是具有最大大小的节点),这是一个BST。

我找到了以下网站,其中包含一个算法。

http://amazoninterview.blogspot.in/2011/10/find-largest-binary-search-tree-in.html

现在重复执行上述代码后,我发现它给出了正确的结果。但是,我发现(通过干运行和直觉)而不是它分配的位置(int函数getmaxbst(),

subtreemin = leftsubtreemin;
subtreemax = rightsubtreemax;

应该执行以下操作

subtreemin = leftsubtreemax;
subtreemax = rightsubtreemin;

我尝试使用上述更改执行代码,它提供了相同且正确的结果。

有人可以帮我找出上述哪项是正确的,为什么

1 个答案:

答案 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;

至于为什么两者都产生类似和正确的结果,我不能在不查看数据的情况下告诉你,但是看起来更改分配会产生错误的结果。对于某些测试用例,您可能会很幸运。