我正在使用二叉搜索树。使用双指针而不是单指针
所以,这里是用于表示该节点的结构:为什么我们
typedef struct TreeNode
{
int num;
struct TreeNode *left,*right;
}TREENODE;
插入树中的一个节点,我有以下方法signatire
void InsertNode(TREENODE **root,int data);
在上述方法需要双指针。我们可以使用单个指针!
我们是否使用双指针来避免重复?
我正在使用二叉搜索树。使用双指针而不是单指针
所以,这里是用于表示该节点的结构:为什么我们
typedef struct TreeNode
{
int num;
struct TreeNode *left,*right;
}TREENODE;
插入树中的一个节点,我有以下方法signatire
void InsertNode(TREENODE **root,int data);
在上述方法需要双指针。我们可以使用单个指针!
我们是否使用双指针来避免重复?
不,这是在重新平衡的情况下需要的。重新平衡根后可以改变。
好吧,我会展开。双指针允许您修改指针。那么你的情况是什么树根呢?指向TREENODE
。搜索等一些操作将永远不会修改它。但有些操作可能需要更改它,以便另一个节点成为新的根目录。所以他们必须有权访问以root身份使用的变量。他们可能需要的一个例子是重新平衡,请参阅AVL trees。
如果我们需要双指针,那么我们需要修改它指向的指针。
不 - 您正在使用双点,因此您可以修改指针。
“双指针”的使用允许您更改<some_class>*
保存地址的内存的内容。所以,我们基本上保存了存储位置的状态,即使是外部函数调用。另一种用途例如用于例如char*
(如字符串)和char**
(如阵列字符串的)
你会发现我的答复在另一个线程:Why use double pointer? or Why use pointers to pointers?
声音很像功课...... – Nick 2012-02-21 16:29:41
@Nick它,但问题已验证。 – Andrey 2012-02-21 16:30:18
我会标记它,然后 – Nick 2012-02-21 16:30:42