gpt4 book ai didi

c - 二叉搜索树插入

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

我只想addAlbum在二叉搜索树中,但树将根据发布年份构建。我写了代码,但它不运行...

#include<stdio.h>
#include<stdlib.h>

typedef struct treeNode {
int releaseYear;
char singerName[50];
char albumTitle[50];
struct treeNode *left;
struct treeNode *right;
} treeNode;

treeNode *addAlbum(treeNode *node,int releaseYear,char singerName[50],char albumTitle[50]) {
if(node==NULL) {
treeNode *temp;
temp=(treeNode *)malloc(sizeof(treeNode));
temp -> releaseYear=releaseYear;
temp -> singerName[50]=singerName[50];
temp -> albumTitle[50]=albumTitle[50];
temp ->left = NULL;
temp ->right = NULL;
return temp;
}

if(releaseYear > (node -> releaseYear)) {
node ->right=addAlbum(node->right,releaseYear ,singerName,albumTitle);
}
else if(releaseYear<(node -> releaseYear)) {
node ->left=addAlbum(node->left,releaseYear, singerName,albumTitle);
}
else {
return node;
}

}

int main() {
treeNode *root;
int releaseYear;
char singerName[50];
char albumTitle[50];
root=addAlbum(root,1995,"a","d");
root=addAlbum(root,1998,"b","c");
printf("singers = s\n",singerName[50]);
printf("albumTitles = %c\n",albumTitle[50]);
printf("years = %d\n",releaseYear);
return 0;
}

最佳答案

有很多问题:

1) 您必须将 root 初始化为 NULL,否则它可能包含任何垃圾值,并且树的构造可能会在第一次调用时失败。

treeNode *root = NULL;

2) 您仅分配了 singerNamealbumTitle 中的一个 char,并且两者均超出范围(有效数组索引为 0... 49)。要复制实际字符串,请使用 strcpy:

strcpy(temp->singerName, singerName); // was: temp->singerName[50]=signerName[50];
strcpy(temp->albumTitle, albumTitle);

3) 如果两个节点的releaseYear 相同,您的代码就会丢失新节点,因为它甚至没有创建。删除 addAlbum 中的最后一个 else 并删除第一个(现在唯一的)else 中的条件,并始终返回 node > 如果您在此通话期间没有创建新的:

if (releaseYear > node->releaseYear) {
node->right = addAlbum(node->right, releaseYear, singerName, albumTitle);
} else {
node->left = addAlbum(node->left, releaseYear, singerName, albumTitle);
}
return node;

4) main 中的 printf 调用只是打印出未初始化局部变量的垃圾值。从 main 中删除除 root 之外的所有其他局部变量。实现树的遍历,打印出其中存储的值。

关于c - 二叉搜索树插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134119/

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