Вставьте двоичное дерево, используя тройные указатели - PullRequest
0 голосов
/ 11 марта 2019

Пожалуйста, найдите код для вышеупомянутой темы. Я экспериментировал с созданием / вставкой двоичного дерева с использованием тройного указателя, но столкнулся с проблемой в функции 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;
}
...