【发布时间】:2014-05-01 08:59:46
【问题描述】:
令 x = 要删除的节点
如何在使用 C 编码的 AVL 树实现中使用递归在节点的结构声明中没有父指针的情况下,在旋转期间将 x 的父级的左指针或右指针重新分配给 x 的左子树或右子树?
我的节点的结构声明:
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;
}
当我执行这些轮换代码时,我丢失了一些不应该删除的元素。
【问题讨论】:
标签: c algorithm data-structures avl-tree recursive-datastructures