搜索树的功能

时间:2014-11-26 23:42:15

标签: c tree ternary-search-tree

我正在使用三元搜索树。以下代码应该概述树的外观。每个叶子都包含一个指向链表的指针,该链表包含指向头节点的指针。每片叶子最多可以有3个节点。因此,在根叶子填充了3个数据值之后,如果它小于第一个节点,则下一个值将插入到左边,如果它更大,它将被插入到右边,如果它在中间,它将插入中心孩子。

struct data
{
  int val;
};


struct node
{
  struct node* next;
  struct data* dta;
};

struct linkedList
{
  int size;
  struct node *head;
};

struct leaf
{
  struct linkedList* ll;
  struct leaf* left;
  struct leaf* right;
  struct leaf* center;
  struct leaf* parent;
};

struct tree
{
  struct leaf* root;
};

我目前正在尝试创建一个以树和int值作为输入的函数。然后它检查树中的每个叶子以查看某个叶子是否等于int值,如果是,它将返回1和0否则。

以下是我的代码

int totalLeaf(struct leaf *lf)
{
  int sum = 0;
  struct node *temp = lf->ll->head;
  while(temp!=NULL)
  {
    sum = sum + temp->dta->val;
    temp = temp->next;
  }
  printf("sum is :  %d\n",sum);
  return sum;
}

int searchTotal(struct tree *tr,int total)
{
  if(tr->root == NULL)
  {
    return 0;
  }
  else
  {
    return searchTotal_r(tr->root,total);
  }
}

int searchTotal_r(struct leaf *lf,int total)
{
  if(lf==NULL)
  {
    return 0;
  }
  if(totalLeaf(lf) == total)
  {
    return 1;
  }
  else
  {
    searchTotal_r(lf->left,total);
    searchTotal_r(lf->center,total);
    searchTotal_r(lf->right,total);
  }

  return 0;
}

任何人都可以建议我哪里出错了以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

  else
  {
    searchTotal_r(lf->left,total);
    searchTotal_r(lf->center,total);
    searchTotal_r(lf->right,total);
  }

更改为:

  else
  {
    return searchTotal_r(lf->left,total) ||
           searchTotal_r(lf->center,total) ||
           searchTotal_r(lf->right,total);
  }

你现在拥有它的方式,递归搜索实际上并不重要,因为即使你找到了什么,你总是会返回0。