【问题标题】:Largest Binary Search Tree in a Binary Tree二叉树中的最大二叉搜索树
【发布时间】:2013-07-08 12:40:31
【问题描述】:

所以,问题是在BST的二叉树中找到最大的子树(最大的子树是最大的节点)。

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

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

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

subtreemin = leftsubtreemin;
subtreemax = rightsubtreemax;

应该做到以下几点

subtreemin = leftsubtreemax;
subtreemax = rightsubtreemin;

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

谁能帮我找出上述作业中哪一个是正确的以及为什么

【问题讨论】:

    标签: c++ binary-search-tree


    【解决方案1】:

    原来的算法分配是正确的。

    'subtreemin' 和 'subtreemax' 是 'getmaxbst' 函数的参数,通过引用传递。当这些变量被赋值时,它也改变了传递给函数的变量,它要么是leftsubtree min/max,要么是rightsubtree min/max。由于在分配点已经确定子树实际上是 BST,因此树的最小值将是左子树的最小值(即 leftsubtreemin),而树的最大值将是最大的右子树的值(rightsubtreemax)。

    我相信你的错误在于认为'subtreemin'和'subtreemax'被用作比较以确定子树是否实际上是BST,但是此时这是使用不同的变量(即leftsubtreemax和rightsubtreemin)完成的

    if(root->data < leftsubtreemax ||
     root->data > rightsubtreemin){
    return -1;
    

    至于为什么两者都产生相似且正确的结果,我无法在不查看数据的情况下告诉您,但是更改分配似乎会产生错误的结果。您可能对某些测试用例感到幸运。

    【讨论】:

    • 谢谢,这确实有助于清理问题。我会投票给你,但显然我不能,因为我没有足够的声誉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2011-09-16
    • 2011-03-10
    相关资源
    最近更新 更多