我编写了这个二叉搜索树数据结构,但我似乎无法弄清楚为什么或如何打印第一个节点是零(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);
}
我认为我的困惑在于间接和使用指针(和指针指针)。我知道还有其他方法可以解决这个问题,但我正在努力坚持使用指针的这种特殊用法。
答案 0 :(得分:1)
您的代码中的问题是您在main
中添加了一个空节点,而没有初始化其item
,left
或right
:当您执行此操作时
tree *root = malloc(sizeof(tree));
root
被分配了一个未初始化的内存块。您可以直接将第一个元素放入第一个元素,但这不是必需的:当root
为NULL
时,您的插入代码已经处理了这种情况。
当您更改代码以指定root
和NULL
时,
tree *root = NULL;
您的程序正常运行(demo)。