Пожалуйста, найдите код для вышеупомянутой темы. Я экспериментировал с созданием / вставкой двоичного дерева с использованием тройного указателя, но столкнулся с проблемой в функции insert()
, особенно в insert(&(**tree)->lchild),data)
.
Пожалуйста, дайте мне знать, как обойти эту проблему.
struct node
{
int data;
struct node* lchild;
struct node *rchild;
int count;
int visited;
};
void sub_arry(int *arr1,int *arr2,struct node **tree);
void insert(struct node ***tree,int data);
int main()
{
int arr1[]={2,1,2,5,7,1,9,3,6,8,8};
int arr2[]={2,1,8,3};
struct node *tree =NULL;
sub_arry(arr1,arr2,&tree);
return 0;
}
void sub_arry(int *arr1,int *arr2,struct node **tree)
{
int i;
int n = sizeof(arr1)/sizeof(arr1[0]);
int m = sizeof(arr2)/sizeof(arr2[0]);
for(i=0;i<n;i++)
{
insert(&tree,arr1[i]);
}
}
void insert(struct node ***tree,int data)
{
struct node *root;
if (**tree == NULL)
{
root = (struct node *)malloc(sizeof(struct node));
root->data = data;
root->lchild = NULL;
root->rchild = NULL;
root->count = 1;
**tree = root;
return;
}
if(data == (**tree)->data)
(**tree)->count += 1;
else if(data > (**tree)->data)
insert(&((*(*tree))->rchild),data); //rchild is of struct node*
else
insert(&(**tree)->lchild,data); //lchild is of struct node *
return;
}