我正在使用三元搜索树。以下代码应该让您大致了解树的外观。每个叶子都包含一个指向链表的指针,该链表包含指向头节点的指针。每个叶子最多可以有 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;
}
谁能建议我哪里出了问题以及如何解决这个问题?