gpt4 book ai didi

c - 二叉树 : Finding the same values

转载 作者:行者123 更新时间:2023-11-30 16:58:48 27 4
gpt4 key购买 nike

我一直在慢慢地编写程序并尝试自学二叉树。该程序是一个电话簿,使用树来存储其数据。我目前陷入 findOrInsert 函数。最初我只是将数据插入到一个开放区域。现在我想在添加之前检查该数据是否已经存在。如果是,则从函数中返回,提示用户已经有相同的数据。我尝试了一些方法,但没有运气。我可能只是尝试从头开始重写它。在此之前,我想看看是否可以获得任何帮助。

这就是我目前拥有的。

struct treeNode * findOrInsert(struct treeNode *p, Entry e) {

if (p == NULL) {
p = createNode(NULL, NULL, e);
}
else if (strcmp(e.fName, p->data.fName) < 0) {
p->left = findOrInsert(p->left, e);
}
else if (strcmp(e.fName, p->data.fName) > 0) {
p->right = findOrInsert(p->right, e);
}
else {
if (strcmp(e.lName, p->data.lName) < 0) {
p->left = findOrInsert(p->left, e);
}
else if (strcmp(e.lName, p->data.lName) > 0) {
p->right = findOrInsert(p->right, e);
}
else {
return p;
}
}
return p;
}

struct treeNode * createNode(struct treeNode *q, struct treeNode *r, Entry e) {
struct treeNode * newNode;
newNode = (struct treeNode*)(malloc(sizeof(struct treeNode)));
newNode->data = e;
newNode->left = q;
newNode->right = r;
return newNode;
}

感谢任何帮助!

最佳答案

为什么不简单地在

之后添加另一个检查
if (p == NULL) {
p = createNode(NULL, NULL, e);
}

查看pe的名字和姓氏是否相同? (当然假设树中的每个条目都有名字和姓氏)。我在这个语句之后说是因为你不想将 null 对象与 e 进行比较。因此,一旦确认 p 确实存在,您应该检查 e 的名字和姓氏是否与 p 相同。如果是这样,则打印出 e 已经存在于树中或其他内容中,并返回 p 结束递归(返回某些内容的替代方法是抛出异常,但这会停止程序的执行)。它应该看起来像这样,

else if (strcmp(e.fName, p->data.fName) == 0 && strcmp(e.lName, p->data.lName) == 0) {
printf("Entry already exists in tree");
return p;
}

关于c - 二叉树 : Finding the same values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545461/

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