gpt4 book ai didi

c - 使用递归删除 AVL 树

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:47 25 4
gpt4 key购买 nike

令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 - 使用递归删除 AVL 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22602035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com