gpt4 book ai didi

c - C中的双指针AVL树

转载 作者:行者123 更新时间:2023-11-30 14:50:29 25 4
gpt4 key购买 nike

我正在使用指针练习我的 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/

编辑:numScan(a,b) 基本上只是扫描字符串并确定它是否是数字数组,以便所有输入都是数字(因此没有输入字母或字符)。 num scan(a和b)中的数字只是允许输入的数字范围。

最佳答案

正如 duskwuff 所说,这是一个简单的不平衡二叉树,而不是 AVL 树。但是,您的代码并没有那么糟糕:

void createTree(sNode **pRoot){
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(pRoot,num); //Just pass the pRoot as it is
}


printf("\n\n\t\t\t\tPress any key to continue.");
getch();
}

int insertNode(sNode **root, int num)
{ //returns the new height of *root
if(*root == NULL){
sNode *node = malloc(sizeof(node));

*root = node;

node->data = num;
node->left = NULL;
node->right = NULL;
node->height = 1;

return 1;
}

sNode *node = *root;
int SubtreeHeight;

if(num < node->data){
SubtreeHeight = insertNode(&node->left, num); //child enters itself at &node->left if needed
}
else
SubtreeHeight = insertNode(&node->right, num);
}
if (SubtreeHeight>=node->height) //if new subtree is higher..
node->height = SubtreeHeight + 1; //plus node itself
return node->height;
}

关于c - C中的双指针AVL树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48960247/

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