设x =要删除的节点
如何在旋转期间将x的父指针的左或右指针重新分配给x的左或右子树,而在AVL树中使用递归在节点的结构声明中没有父指针用C?
编写的实现My Node的结构声明:
typedef struct Node{
int key;
struct Node *left;
struct Node *right;
int height;
}node;
目前,这些是我的轮换代码:
void rotateRight(node **n){
node *lChild = (*n)->left;
node *subtree = lChild->right;
// Rotate Right
lChild->right = *n;
(*n)->left = subtree;
*n = lChild;
// Update Height
lChild->right->height = max(getHeight(lChild->right->left), getHeight(lChild->right->right)) + 1;
(*n)->height = max(getHeight((*n)->left), getHeight((*n)->right)) + 1;
}
void rotateLeft(node **n){
node *rChild = (*n)->right;
node *subtree = rChild->left;
// Rotate Left
rChild->left = *n;
(*n)->right = subtree;
*n = rChild;
// Update Height
rChild->left->height = max(getHeight(rChild->left->left), getHeight(rChild->left->right)) + 1;
(*n)->height = max(getHeight((*n)->left), getHeight((*n)->right)) + 1;
}
当我执行这些旋转代码时,我丢失了一些本应该删除的元素。
答案 0 :(得分:0)
你不能。可以在结构中添加指向父项的指针,也可以在每个级别上传递node和parent的方式编写递归,这样就可以将父项作为第二个参数传递给旋转函数。