当前位置: 首页 > 知识库问答 >
问题:

来自testdome的二叉搜索树

黄永怡
2023-03-14

我写的是testdome https://www.testdome.com/for-developers/solve-question/9708中给出的一个测试示例的答案

问题是关于二叉搜索树的:

二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。

例如,对于以下树:n1(值:1,left:null,right:null)n2(值:2,left:n1,right:n3)n3(值:3,left:null,right:null)调用contains(n2,3)应返回true,因为根位于n2的树包含数字3。

我修改的代码如下,输出看起来工作良好,但测试结果告诉一个失败的存在:在一个大的树上的性能测试:超过了时间限制,你能帮助修改我的模式来修复这个失败吗?

#include <stdexcept>
#include <string>
#include <iostream>

class Node
{
public:
Node(int value, Node* left, Node* right)
{
    this->value = value;
    this->left = left;
    this->right = right;
}

int getValue() const
{
    return value;
}

Node* getLeft() const
{
    return left;
}

Node* getRight() const
{
    return right;
}

private:
int value;
Node* left;
Node* right;
};

class BinarySearchTree
{
public:
static bool contains(const Node& root, int value)
{
    Node* tree;
    int val = root.getValue();
    std::cout<<"current node's value is:"<<val<<'\n';

        if (val==value)
        {
            return true;
        }
        else if (val>value)
        {
            tree = root.getLeft();                
            if(tree != NULL)
            {
                std::cout<<"left node's value is:"<<tree->getValue()<<'\n';
                return contains(*tree, value);
            }
            else 
            {
                return false;
            }
        }
        else
        {
            tree = root.getRight();
            if(tree != NULL)
            {
                std::cout<<"right node's value is:"<<tree->getValue()<<'\n';
                return contains(*tree, value);
            }
            else 
            {
                return false;
            }
        }      
    //throw std::logic_error("Waiting to be implemented");
   }   
};

#ifndef RunTests
int main()
{
Node n1(1, NULL, NULL);
Node n3(3, NULL, NULL);
Node n2(2, &n1, &n3);
std::cout << BinarySearchTree::contains(n2, 3);
}
#endif

共有1个答案

拓拔迪
2023-03-14

删除STD::COUT即可。打印到终端有巨大的时间成本。

 类似资料:
  • 这里有问题 二叉搜索树(BST)是一种二叉树,其中每个节点的值大于或等于该节点左子树中所有节点的值,而小于该节点右子树中所有节点的值。 编写一个函数,根据使用的时间有效地检查给定的二叉搜索树是否包含给定的值。

  • 我很难按我教授想要的格式打印出一个二叉搜索树。 他的格式是这样的: 我的代码:

  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。

  • 我正在学习C++语言,我正在尝试编写BST,但是出了问题。我尝试添加元素到空树,根是NULL,但添加元素后,根仍然是NULL,尽管添加成功了(我在调试模式下看到,节点设置为tmp)。我不知道为什么会这样。

  • 我用java编写了一个实用的二叉搜索树,除了一个关键的函数,搜索。我使用的逻辑是,我将检查根是否为空,然后我要搜索的术语是否等于根(所以返回根)或>根(所以搜索右子树)或 使用printlns查看正在发生的事情,我发现如果值在那里,它将通过正确的if语句(包括将BNode n设置为找到的值),但随后由于某种原因将再次通过方法(返回null)。 这个方法唯一起作用的时候是在搜索根节点的时候,这对我来

  • 在二元搜索树的情况下,为什么我们不能简单地在一个节点有两个子节点的情况下,将一个节点的前一个节点替换为后一个节点?