使用双指针而不是单指针

时间:2012-02-21 16:27:56

标签: c pointers data-structures

我正在使用二进制搜索树。

所以,这是用于表示节点的结构:

typedef struct TreeNode
{
int num;
struct TreeNode *left,*right;
}TREENODE;

要在树中插入节点,我有以下方法signatire

void InsertNode(TREENODE **root,int data);

在上面的方法中,为什么我们需要双指针。我们可以使用单个指针!

我们是否使用双指针来避免重复?

5 个答案:

答案 0 :(得分:7)

不,这是重新平衡的必要条件。重新平衡root后可以更改。

好的,我会扩大。双指针允许您修改指针。那么你的案例中的树根是什么?指向TREENODE的指针。某些操作(如搜索)永远不会修改它。但是某些操作可能需要更改它,以便另一个节点成为新的根。因此,他们必须能够访问您以root身份使用的变量。他们可能需要它的一个例子是重新平衡,请参阅AVL trees

答案 1 :(得分:2)

如果我们需要双指针,那么我们需要修改它指向的指针。

答案 2 :(得分:2)

不 - 您正在使用双点,因此您可以修改指针。

答案 3 :(得分:0)

这非常取决于你如何使用树。如果树应该保持某种排序,那么插入可以改变根节点,所以你需要双指针。

答案 4 :(得分:0)

使用“双指针”可以更改<some_class>*保存地址的内存内容。所以,我们基本上在函数调用之外保留了Memory位置的状态。另一种用途就像是,例如char*(作为字符串)和char**(作为字符串数组

您可以在另一个帖子中找到我的回复:Why use double pointer? or Why use pointers to pointers?