我正在尝试将存储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;
}

===============>>#1 票数:0 已采纳

我还没有看到您的调用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);

它应该工作。

  ask by user3547778 translate from so

未解决问题?本站智能推荐: