Возникла проблема со вставкой бинарного дерева поиска. Он хорошо работает для левого дерева, но не для правого - PullRequest
0 голосов
/ 02 ноября 2019

Это функция вставки, которую я использую. Создание и вставка корня как левого ребенка работает нормально. Но вставка как правого потомка происходит только дважды.

struct node * insert(struct node *root1, struct node *new1)
{    printf("root address=%u",root1);

    if(root1==NULL){
            printf("xyz");
        root1=new1;
    return root1;
    }
  if(root1->data>new1->data)
    {
        if(root1->lchild==NULL){
            root1->lchild=new1;
            printf("A1");
        }
        else{
                printf("A2");
            insert(root1->lchild,new1);

        }

    }
    if(root1->data < new1->data)
    {
        if(root1->rchlid==NULL){
            root1->rchlid=new1;
            printf("B1");
        }
        else{
                printf("B2");
          insert(root1->rchlid,new1);

        }

    }
    printf("FFF");
  return root;
}

1 Ответ

0 голосов
/ 02 ноября 2019

Упрощенно:


struct node * insert(struct node *zroot, struct node *new1)
{    
    if(zroot==NULL) return new1;

    if (zroot->data>new1->data) zroot->lchild = insert(zroot->lchild,new1);
    else zroot->rchild = insert(zroot->rchild,new1);

    return zroot;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...