【发布时间】:2018-02-24 07:00:24
【问题描述】:
我正在使用指针练习我的 AVL 树。但是如果我什至不能制作不平衡的树,我就无法继续平衡它。我认为我使用指针的方式有问题。这是我的代码:
typedef struct structNode {
int data;
struct structNode *left;
struct structNode *right;
int height;
} sNode;
void createTree(sNode **node);
void insertNode(sNode **node, int num);
void main(){
sNode * root = NULL;
createTree(&root);
}
void createTree(sNode **root){
int i, num, nodes;
printf("\n\t\t\t\tNumber of nodes?\n");
nodes = numScan(1,6);
for(i=0;i<nodes;i++){
num = numScan(1,100);
insertNode(&*root,num);
}
printf("\n\n\t\t\t\tPress any key to continue.");
getch();
}
void insertNode(sNode **root, int num){
if(*root == NULL){
sNode *node = malloc(sizeof(node));
*root = node;
node->data = num;
node->left = NULL;
node->right = NULL;
node->height = 1;
return;
}
sNode *node = *root;
if(num < node->data){
node->left = insertNode(&node->left, num); //void value not ignored as it ought to be
}
else
node->right = insertNode(&node->right, num); //void value not ignored as it ought to be
}
}
我的代码来自这个网站,但它不使用双指针,所以我在学习时遇到了麻烦
网站:https://www.geeksforgeeks.org/avl-tree-set-1-insertion/
edit: numScan(a,b) 基本上只是扫描一个字符串并确定它是否是一个数字数组,以便所有输入都是数字(因此没有输入字母或字符)。 num scan (a 和 b) 中的数字只是允许输入的数字范围。
【问题讨论】:
-
numScan()做什么?在调用insertNode(&*root,num);时&*root也是错误的 -->insertNode(&root,num); -
哦是的对不起我忘了添加它,它基本上只是扫描一个字符串并确定它是否是一个数字数组,以便所有输入都是数字。 num scan 中的数字只是允许输入的范围。
-
你在这里实现的不是 AVL。它只是一个不平衡的二叉树。
-
“不运行”不够具体。到底发生了什么?此外,您应该提供一个显示行为的最小的完整示例。
-
一个好的起点是C AVL Tree
标签: c data-structures linked-list binary-tree avl-tree