C 右旋转
我正试图理解下面的AVL树代码,但遇到了一些困难。我知道,如果树是左重,它会做一个右旋转。同样的道理,如果它是右重的,它会做一个左旋转。如果有人能解释或为我指出理解以下代码的正确方向,我将不胜感激C 右旋转,c,avl-tree,C,Avl Tree,我正试图理解下面的AVL树代码,但遇到了一些困难。我知道,如果树是左重,它会做一个右旋转。同样的道理,如果它是右重的,它会做一个左旋转。如果有人能解释或为我指出理解以下代码的正确方向,我将不胜感激 static void avl_rotate_right(TLDList *tld, TLDNode *node) { if (node->parent != NULL) { if (node->parent->left == node)
static void avl_rotate_right(TLDList *tld, TLDNode *node) {
if (node->parent != NULL) {
if (node->parent->left == node)
node->parent->left = node->left;
else
node->parent->right = node->left;
} else
tld->root = node->left;
node->left->parent = node->parent;
node->parent = node->left;
node->left = node->left->right;
if (node->left != NULL)
node->left->parent = node;
node->parent->right = node;
}
基本上,这段代码检查正在旋转的节点是否是根。如果是这种情况,则将根重新分配为上一个根的左子级。如果正在旋转的节点不是根节点,并且正在旋转的节点是左子节点,则会将其替换为自己的左子节点;如果是右子节点,则会将父节点的右子节点替换为节点的左子节点 然后将节点左侧子节点的父节点指定为节点父节点。然后将节点父节点指定为节点的左子节点。然后将节点的左子节点指定为节点左子节点的右子节点。如果节点左子节点不为null,则将节点左子节点的父节点指定为节点如果节点左子节点为null,则将节点父节点右子节点设置为节点 有用吗