C++ BST只能找到第一个节点

C++ BST只能找到第一个节点,c++,arrays,search,binary-search-tree,C++,Arrays,Search,Binary Search Tree,每个节点都有一个数据和意义数组,右指针和左指针。看起来第二个节点被添加了(我通过打印计数知道),但当我搜索它时,没有结果。另外,如果我尝试添加更多节点 大体上 BST tree; char sw[10]; char A[ ]={"BST"}; char Am[ ]={"Binary Search Tree"}; tree.maketree(A,Am); char B[ ]={"COM"}; char Bm[ ]={"commerce"}; tree.maketree(B,Bm); cou

每个节点都有一个数据和意义数组,右指针和左指针。看起来第二个节点被添加了(我通过打印计数知道),但当我搜索它时,没有结果。另外,如果我尝试添加更多节点

大体上

BST tree;
char sw[10];
char A[ ]={"BST"};
char Am[ ]={"Binary Search Tree"};
tree.maketree(A,Am);
char B[ ]={"COM"};
char Bm[ ]={"commerce"};
tree.maketree(B,Bm);
    cout<<"Search: ";
    string inputword;
    cin>>inputword;
    strcpy(sw, inputword.c_str());
    tree.BST_Retrieve(sw);
BST树;
char-sw[10];
字符A[]={“BST”};
字符Am[]={“二叉搜索树”};
树。maketree(A,Am);
字符B[]={“COM”};
字符Bm[]={“商业”};
tree.maketree(B,Bm);
coutinputword;
strcpy(sw,inputword.c_str());
树。BST_检索(sw);
检索功能:_检索返回节点(如果找到)和BST_检索打印含义

NODE* _retrieve (char key[],NODE*node)
{
    if (node)
    {
        if (strcmp(key,node->data)<0)
            return _retrieve (key, node->left);
        else if (strcmp(key,node->data)>0)
            return _retrieve (key, node->right);
        else
            return (node);
    }
    else
        return NULL;
}// _retrieve
bool BST_Retrieve (char key[])
{

    NODE *node;
    if (! root)
        return false;
    node = _retrieve (key,root);
    if (node)
    {
        printf("%s",node->meaning);
        cout<<endl;
        node=node->right;
        if (node) {
            cout<<"\nNext word is: ";
            printf("%s",node->data);
        }
        return true;
    } 
    else
        return false;
}
NODE*\u检索(字符键[],NODE*NODE)
{
如果(节点)
{
if(strcmp(键,节点->数据)左侧);
else if(strcmp(键,节点->数据)>0)
返回_检索(键,节点->右);
其他的
返回(节点);
}
其他的
返回NULL;
}//_检索
bool BST_检索(字符键[])
{
节点*节点;
如果(!root)
返回false;
节点=_检索(键,根);
如果(节点)
{
printf(“%s”,节点->含义);

你的检索代码看起来不错,所以我会检查你的树构建代码

此外,我不会将
printf
cout
混用

cout << node->meaning << endl;
可以安全地缩短为:

tree.BST_Retrieve( inputword.c_str() );
由于您没有尝试存储由
c_str
返回的指针。但是,您必须更改方法以获取
const char*key
而不是
char key[]

编辑:对于左
和右的工作方式,您的检索代码和树生成器代码似乎有相反的含义。树生成器:

if (strcmp(node->data,newPtr->data)<0)
    node->left = addword(node->left,newPtr);

您需要翻转一个以匹配另一个。我的首选是翻转生成器,以便左指针小于父节点,而父节点小于右节点。

感谢Joe缩短了我的代码,但我确信树构建是正确的,因为我有一个显示所有节点的显示函数。对不起,bu中的更改语句ilder to(strcmp(newPtr->data,node->data)left=addword(newPtr,node->left);对了,它变成了一个运行时错误!谢谢你的耐心!我的想法是blown@Beginner:当您更改生成器时,只需将参数的顺序更改为
strcmp
。除此之外,我不知道该告诉您什么。可能在“then”和“您的
if
语句中的else子句,用于显示您的递归步骤以及您的代码正在做出的决定。哦,编辑后我忘了关闭括号。真的我不知道如何感谢您!
tree.BST_Retrieve( inputword.c_str() );
if (strcmp(node->data,newPtr->data)<0)
    node->left = addword(node->left,newPtr);
    if (strcmp(key,node->data)<0)
        return _retrieve (key, node->left);