有序二叉树中的查找方法

时间:2013-11-28 18:37:51

标签: c struct tree

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

文本文件:

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

1 个答案:

答案 0 :(得分:0)

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

当找到相等的节点时,你的查找功能看起来是另一种方式,因为你有钱&gt;和金钱&lt;,但不相等。

在插入时和搜索时需要使用相同的比较,如果等于右边,则使用右边的=等。