指向指针问题的指针

时间:2009-12-31 17:56:03

标签: c pointers tree

我正在研究树木,一切似乎都很好,直到我开始了一个需要旋转的avl树。我建立了一个旋转算法,在2或3次旋转之前工作正常,算法如下:

static void _nodeRotateRight(avl_tree* t, avl_tree_node** n) {
avl_tree_node* node = (*n)->left;

// refresh parents before rotate
if (node->right)
    node->right->parent = (*n);

if ((*n) == t->top) {
    t->top = node;
    node->parent = NULL;
}
else {
    (*n)->parent->right = node;
    node->parent = (*n)->parent;
}

(*n)->parent = (*n)->left;

// rotate nodes (pointers)
(*n)->left = node->right;
node->right = (*n);
(*n) = node;

// refresh heights
(*n)->right->height -= 2;

}

错误已开启: (* n) - > parent-> right = node;

实际上有效,但在3º旋转时有一个奇怪的行为,为“右”分配一个新值实际上改变了( _n)而不是右边。 显然( _n) - > parent-> right指向( _n),但是如果我向右分配一个新值,我不能改变( _n)因为它们是不同的地址不同的指针... 解决这个问题的方法是什么?

1 个答案:

答案 0 :(得分:1)

您应该缓存*n的值。

avl_tree_node *n1 = *n;

现在,无论您如何更改*nn1都将继续指向原始节点。