【发布时间】:2016-05-22 12:37:43
【问题描述】:
我正在为 AVL 树编写右旋转。但它给出了运行时错误。目前我忽略了 AVL 树的高度部分。我稍后会处理它。但只是在 5 处应用右旋转会出现问题。请帮助。 我使用的 AVL 树是:
9(Root)
5(Left Child) 13(Right Child)
3 7 11 17
2
1
C 代码:
#include <stdio.h>
#include <malloc.h>
struct AVLTree
{
int data;
struct AVLTree *left;
struct AVLTree *right;
};
struct AVLTree *RightRotate(struct AVLTree *rootop)
{
struct AVLTree *A = rootop->left;
rootop->left = A->right;
A->right = rootop;
return A;
}
int main()
{
struct AVLTree * root = (struct AVLTree *)malloc(sizeof(struct AVLTree));
root-> data = 9;
struct AVLTree * l = (struct AVLTree *)malloc(sizeof(struct AVLTree));
l -> data = 5;
struct AVLTree * ll = (struct AVLTree *)malloc(sizeof(struct AVLTree));
ll -> data = 3;
ll -> left = ll -> right = NULL;
struct AVLTree * lll = (struct AVLTree *)malloc(sizeof(struct AVLTree));
lll -> data = 2;
lll -> left = lll -> right = NULL;
ll->left = lll;
struct AVLTree * llll = (struct AVLTree *)malloc(sizeof(struct AVLTree));
llll -> data = 1;
llll -> left = llll -> right = NULL;
lll->left = llll;
struct AVLTree * lr = (struct AVLTree *)malloc(sizeof(struct AVLTree));
lr -> data = 7;
lr -> left = lr -> right = NULL;
l -> left = ll;
l -> right = lr;
struct AVLTree * r = (struct AVLTree *)malloc(sizeof(struct AVLTree));
r -> data = 13;
struct AVLTree * rl = (struct AVLTree *)malloc(sizeof(struct AVLTree));
rl -> data = 11;
rl -> left = rl -> right = NULL;
struct AVLTree * rr = (struct AVLTree *)malloc(sizeof(struct AVLTree));
rr -> data = 17;
rr -> left = rr -> right = NULL;
r -> left = rl;
r -> right = rr;
root -> left = l;
root -> right = r;
RightRotate(l);
printf("Root is %d\n",root->data);
printf("Left is %d\n",l->data);
printf("Left left is %d\n",l->left->data);
printf("Left right is %d\n",l->right->data);
printf("Left Ka Left is %d\n",ll->data);
printf("LL left is %d\n",ll->left->data);
printf("Left Ka Left Ka Left is %d\n",lll->data);
printf("LLL left is %d\n",lll->left->data);
return 0;
}
【问题讨论】:
-
什么问题?你可以说得更详细点吗?它有段错误吗?你试过调试吗?
-
只是运行时错误。你认为调用函数是错误的吗?如果我把 l = RightRotate(l);它有效,但给出了错误的值。
标签: c data-structures tree avl-tree