【发布时间】:2014-09-19 07:25:46
【问题描述】:
void insert(node ** tree, int val)
{
node *temp = NULL;
if(!(*tree))
{
temp = (node *)malloc(sizeof(node));
temp->left = temp->right = NULL;
temp->data = val;
*tree = temp;
return;
}
if(val < (*tree)->data)
{
insert(&(*tree)->left, val);
}
else if(val > (*tree)->data)
{
insert(&(*tree)->right, val);
}
}
此函数使用指向指针node ** tree 的指针来表示二叉树的头部。我在许多教程和网站上都遇到了相同的方法。我想知道为什么每个人都坚持使用指向指针的指针,为什么不只是'node * tree'。我认为即使指向树头的指针也可以很好地完成这项工作,并且仅使用指向树头的指针,递归调用如下(如果我错了,请纠正我):
insert(tree->left, val); // assuming definisiton as void insert(node *tree, int val);
或
insert(tree->right, val); // assuming definisiton as void insert(node *tree, int val);
如果我的理解有误,请纠正我。我是新手。谢谢。
【问题讨论】:
-
如果
val等于 到(*tree)->data呢? -
仅供参考,上述非递归版本can be seen here
标签: c pointers recursion data-structures tree