我正在从文本文件中读取行,将每行存储在节点中,构造有序的二叉树。
文本文件:
1/12/04琼斯,约翰逊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票据,迈克$ 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);
}
唯一的问题是,当我创建一个新的单独节点,它是树中已有内容的精确副本时,我的查找方法返回0时应该返回1.这是treenode结构:
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
答案 0 :(得分:0)
当节点与另一个节点相等时,您将它放在哪里?向左还是向右?
当找到相等的节点时,你的查找功能看起来是另一种方式,因为你有钱&gt;和金钱&lt;,但不相等。
在插入时和搜索时需要使用相同的比较,如果等于右边,则使用右边的=等。