Недавно я изучил отдельную технику цепочки хеширования и попыток написать программу C, которая будет печатать двоичное дерево в вертикальном порядке, когда я передаю массив ha sh, который является массивом указателей на struct node для createHa. sh () функция я получаю следующие ошибки. Спасибо заранее, чтобы сообщить мне, что на самом деле я делаю неправильно.
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* next;
};
struct BTnode
{
int data;
struct BTnode* Lchild;
struct BTnode* Rchild;
};
void findmin_max(struct BTnode* root,int *min,int *max,int hd)
{
if(root==NULL)
return;
if(hd<*min)
{
*min=hd;
}
else if(hd>*max)
{
*max=hd;
}
findmin_max(root->Lchild,min,max,hd-1);
findmin_max(root->Rchild,min,max,hd+1);
}
struct BTnode* newNode(int data)
{
struct BTnode* newnode=(struct BTnode*)malloc(sizeof(struct BTnode));
newnode->data=data;
newnode->Lchild=NULL;
newnode->Rchild=NULL;
return newnode;
}
struct node* insertnode(struct BTnode* root,int ln,int hd)
{
if(root==NULL);
return root;
else if(hd==ln)
{
struct node* nw=(struct node*)malloc(sizeof(struct node));
nw->data=root->data;
nw->next=NULL;
return nw;
}
insertnode(root,ln,hd-1);
insertnode(root,ln,hd+1);
}
void createHash(struct BTnode* root,struct node* hash,int min,int max,int hd)
{
int key=0;
for(int line_no=min;line_no<=max;line_no++)
{
key=line_no+abs(min);
if((hash[key])==NULL)
(hash[key])=insertnode(root,line_no,0);
else
{
struct node* temp=(hash[key]);
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=insertnode(root,line_no,0);
}
}
}
int main()
{
struct BTnode* root;
int min=0;
int max=0;
root = newNode(1);
root->Lchild = newNode(2);
root->Rchild = newNode(3);
root->Lchild->Rchild = newNode(4);
root->Lchild->Rchild = newNode(5);
root->Rchild->Lchild = newNode(6);
root->Rchild->Rchild = newNode(7);
root->Rchild->Lchild->Rchild = newNode(8);
root->Rchild->Rchild->Rchild = newNode(9);
findmin_max(root,&min,&max,0);
int N=abs(min-max);
struct node* hash[N];
for(int i=0;i<N;i++)
hash[i]=NULL;
createHash(root,hash,min,max,0);
return 0;
}
В настоящее время моя программа не содержит функции печати, которая будет печатать таблицу ha sh, и я собирал ее, чтобы проверить, правильно ли я написал вышеуказанный код.
Эти ошибки, которые я получаю при компиляции в Linux терминал.
BT_vertical.c: In function ‘insertnode’:
BT_vertical.c:40:9: warning: returning ‘struct BTnode *’ from a function with incompatible return type ‘struct node *’ [-Wincompatible-pointer-types]
return root;
^~~~
BT_vertical.c:41:9: error: ‘else’ without a previous ‘if’
else if(hd==ln)
^~~~
BT_vertical.c: In function ‘createHash’:
BT_vertical.c:57:18: error: invalid operands to binary == (have ‘struct node’ and ‘void *’)
if((hash[key])==NULL)
~~~~~~~~~~~^~
BT_vertical.c:58:19: error: incompatible types when assigning to type ‘struct node’ from type ‘struct node *’
(hash[key])=insertnode(root,line_no,0);
^
BT_vertical.c:61:23: error: incompatible types when initializing type ‘struct node *’ using type ‘struct node’
struct node* temp=(hash[key]);
^
BT_vertical.c: In function ‘main’:
BT_vertical.c:91:18: warning: passing argument 2 of ‘createHash’ from incompatible pointer type [-Wincompatible-pointer-types]
createHash(root,hash,min,max,0);
^~~~
BT_vertical.c:51:50: note: expected ‘struct node *’ but argument is of type ‘struct node **’
void createHash(struct BTnode* root,struct node* hash,int min,int max,int hd)
~~~~~~~~~~~~~^~~~