【问题标题】:My string BST in C is always null after insert插入后,我在 C 中的字符串 BST 始终为空
【发布时间】:2014-04-21 06:00:59
【问题描述】:

我正在尝试将存储 INT 的预先编写的 BST 更改为可以存储字符串的 BST。

据我所知,我的代码应该可以工作,但是当我尝试打印树的内容时,它似乎总是为空(树不会尝试打印,因为我提供给它的节点显然是空的)。

从其他类似的问题中,我看到它可能与我的插入工作方式以及节点中的值未正确分配有关。无论如何,我会发布我的插入代码,看看我们如何进行。

我的节点定义为:

typedef struct node *node_ptr;
struct node
{
    char data_item[7];
    node_ptr left;
    node_ptr right;
};

以及插入功能:

node_ptr insert(char *n, node_ptr tree)
{
    if(!tree) 
    {
        tree = (node_ptr) malloc(sizeof(struct node));
        strcpy(tree->data_item, n);
        tree->left = tree->right = NULL;
    }

    else if(strcmp(tree->data_item, n) < 0)
    {
        tree->left = insert(n, tree->left);
    }
    else if(strcmp(tree->data_item, n) > 0)
    {
        tree->right = insert(n, tree->right);
    }

    return tree;
}

【问题讨论】:

    标签: c string binary-search-tree


    【解决方案1】:

    我没有看到你调用insert的代码,但我猜它看起来像:

    node_ptr tree = NULL;
    insert("abcd", tree);
    insert("123", tree);
    insert("xyz", tree);
    

    问题是tree 永远不会更新为指向调用函数中的正确节点。

    如果你把它改成:

    node_ptr tree = NULL;
    tree = insert("abcd", tree);
    insert("123", tree);
    insert("xyz", tree);
    

    它应该可以工作。

    【讨论】:

    • 非常感谢。这几天一直困扰着我。你完全正确。
    • @user3547778 很高兴我能提供帮助。请在以后添加调用代码。这将加快诊断问题的过程。
    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多