C - 二进制搜索树的初始插入为NULL

时间:2014-11-17 02:35:40

标签: c algorithm binary-tree

我编写了这个二叉搜索树数据结构,但我似乎无法弄清楚为什么或如何打印第一个节点是零(0)。

我的代码在ideone上是publicly accessible here

void insert_tree(tree **l, int x, tree *parent)
{
    tree *p;       /* temp pointer */

    if (*l == NULL) {
        p = malloc(sizeof(tree));
        p->item = x;
        p->left = p->right = NULL;
        p->parent = parent;
        *l = p;     /* link into parent's record */
        return;
    }

    if (x < (*l)->item)
        insert_tree(&((*l)->left), x, *l);
    else
        insert_tree(&((*l)->right), x, *l);
}

我认为我的困惑在于间接和使用指针(和指针指针)。我知道还有其他方法可以解决这个问题,但我正在努力坚持使用指针的这种特殊用法。

1 个答案:

答案 0 :(得分:1)

您的代码中的问题是您在main中添加了一个空节点,而没有初始化其itemleftright:当您执行此操作时

tree *root = malloc(sizeof(tree));

root被分配了一个未初始化的内存块。您可以直接将第一个元素放入第一个元素,但这不是必需的:当rootNULL时,您的插入代码已经处理了这种情况。

当您更改代码以指定rootNULL时,

tree *root = NULL;

您的程序正常运行(demo)。