2012-02-21 62 views
5

我正在使用二叉搜索树。使用双指针而不是单指针

所以,这里是用于表示该节点的结构:为什么我们

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

插入树中的一个节点,我有以下方法signatire

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

在上述方法需要双指针。我们可以使用单个指针!

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

+0

声音很像功课...... – Nick 2012-02-21 16:29:41

+0

@Nick它,但问题已验证。 – Andrey 2012-02-21 16:30:18

+0

我会标记它,然后 – Nick 2012-02-21 16:30:42

回答

7

不,这是在重新平衡的情况下需要的。重新平衡根后可以改变。

好吧,我会展开。双指针允许您修改指针。那么你的情况是什么树根呢?指向TREENODE。搜索等一些操作将永远不会修改它。但有些操作可能需要更改它,以便另一个节点成为新的根目录。所以他们必须有权访问以root身份使用的变量。他们可能需要的一个例子是重新平衡,请参阅AVL trees

+2

这个。当您使用指针时,根节点将始终指向您作为参数提供的节点。但是当通过某种平衡,根节点发生变化时,指向根的指针也需要改变。这就是为什么你需要一个指针指针。 (根在这里不仅是一个输入变量,而且输出也是变量) – Hayt 2012-02-21 16:35:20

+1

@Hayt Andrey 明白了...... thxxx ... u人r天才... – Anirudha 2012-02-21 16:38:21

+0

它不一定是“重新平衡”。谁说在那里实施任何重新平衡?这可能仅仅是事实,即第一次插入空树会将根指针从空指针改变为非空指针。 – AnT 2013-06-29 05:46:13

2

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

0

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

+0

是啊..它是一个排序的树.. – Anirudha 2012-02-21 16:34:15

2

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

0

“双指针”的使用允许您更改<some_class>*保存地址的内存的内容。所以,我们基本上保存了存储位置的状态,即使是外部函数调用。另一种用途例如用于例如char*(如字符串)和char**(如阵列字符串的

你会发现我的答复在另一个线程:Why use double pointer? or Why use pointers to pointers?