我正在使用二进制搜索树。
所以,这是用于表示节点的结构:
typedef struct TreeNode
{
int num;
struct TreeNode *left,*right;
}TREENODE;
要在树中插入节点,我有以下方法signatire
void InsertNode(TREENODE **root,int data);
在上面的方法中,为什么我们需要双指针。我们可以使用单个指针!
我们是否使用双指针来避免重复?
答案 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?