gpt4 book ai didi

c - 有序二叉树中的查找方法

转载 作者:行者123 更新时间:2023-11-30 17:43:16 26 4
gpt4 key购买 nike

我正在从文本文件中逐行读取,将每一行存储在一个节点中,从而构造一个有序二叉树。

文本文件:

1/12/04 Jones, John $31.11
12/22/03 Dickinson, Tony $5.04
12/15/03 Lee, Jerry $21.12
12/19/03 Kahn, Chris $83.15
1/31/04 Bills, Mike $32.00
1/15/04 Lake, Jeff $6.66

订单与节点关联的金额有关。 (中序遍历将按照金额从最小到最大进行。)

我有一个查找方法,它获取一个节点并在树中搜索它。如果在树中找到,则返回1,否则返回0:

    int lookup(struct treenode *whole, struct treenode *t) {
if(whole == NULL)
return 0;
else
if((whole->year == t->year)&&
(whole->month == t->month)&&
(whole->day == t->day)&&
(whole->lastname == t->lastname)&&
(whole->firstname == t->firstname)&&
(whole->money == t->money))
return 1;
else
if(t->money < whole->money)
return lookup(whole->left,t);
else return lookup(whole->right,t);
}

唯一的问题是,当我创建一个新的单独节点(该节点是树中已有节点的精确副本)时,我的查找方法在应该返回 1 时返回 0。这是树节点结构:

struct treenode { // transaction
int month,day,year;
char* lastname;
char* firstname;
float money;
struct treenode *left;
struct treenode *right;
};

假设 root1 指向一棵树,该树将每一行存储在一个节点中。为什么我的查找方法不起作用?

 if (file1 != NULL) {  
char line1 [256]; /* or other suitable maximum line size */
while (fgets(line1, sizeof line1, file1 ) != NULL) {

sscanf(line1,"%d/%d/%d %s %s $%f", &month, &day, &year, lastname,
firstname, &money);
// printf("%d/%d/%d %s %s $%.2f\n", month, day, year, lastname,
// firstname, money );
tr1 = talloc(month, day, year, lastname, firstname, money);
root1 = addtree(root1, tr1);
}
fclose (file1);
}
else {
perror (filename1); /* why didn't the file open? */
}
printf("IN TREE: %d\n",lookup(root1,test));
IN TREE: 0

最佳答案

当该节点与另一个节点相等时,您将该节点放在哪里?向左还是向右?

看起来你的查找函数在找到相等的节点时采取了另一种方式,因为你有钱>和钱<,但不相等。

插入和搜索时需要使用相同的比较,如果等于在右边则使用 = 来表示右边,依此类推。

关于c - 有序二叉树中的查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20272888/

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