Как добавить значение в root без использования временного узла? - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь создать функцию для добавления узла в BST.

Код для функции вставки приведен ниже.

void insert(struct node **root,int data){
    if(!(*root)){
        struct node *temp=(struct node*)malloc(sizeof(struct node));
        temp->data=data; //how to do without temp node
        temp->left=temp->right=NULL;
        *root=temp;
        return;
    }

    if(data<(*root)->data){
        insert(&(*root)->left,data);
    }
    else if(data>(*root)->data){
        insert(&(*root)->right,data);
    }
}

как вставить значение для первого условия if без использования временного узла. Я довольно плохо знаком с указателями. Я могу получить правильный ответ, но хочу избежать использования временного узла

EDIT:

это согласно предложению @ 1201ProgramAlarm В соответствии с этим я не получаю вывод на печать

struct node{
    int data;
    struct node *left,*right;
};
//
void print_inorder(struct node * tree)
{
    if (tree)
    {
        print_inorder(tree->left);
        printf("%d\n",tree->data);
        print_inorder(tree->right);
    }
}
void insert(struct node **root,int data){
    if(!(*root)){
        struct node *temp=(struct node*)malloc(sizeof(struct node));
        (*root)->data=data;
        (*root)->left=(*root)->right=NULL;
        return;
    }

    if(data<(*root)->data){
        insert(&(*root)->left,data);
    }
    else if(data>(*root)->data){
        insert(&(*root)->right,data);
    }
}

void main(){

    struct node *root=(struct node*)malloc(sizeof(struct node));
    root=NULL;
    insert(&root,9);
    insert(&root,4);
    insert(&root,15);
    insert(&root,6);
    insert(&root,12);
    insert(&root,17);
    insert(&root,2);
    print_inorder(root);
}

РЕДАКТИРОВАТЬ 2: удалил временную инициализацию в функции и инициализировал корень как нулевой в main.

void insert(struct node **root,int data){
    if(!(*root)){
        (*root)->data=data;
        (*root)->left=(*root)->right=NULL;
        return;
    }

    if(data<(*root)->data){
        insert(&(*root)->left,data);
    }
    else if(data>(*root)->data){
        insert(&(*root)->right,data);
    }
}

void main(){
    struct node *root=NULL;
    insert(&root,9);
    insert(&root,4);
    insert(&root,15);
    insert(&root,6);
    insert(&root,12);
    insert(&root,17);
    insert(&root,2);
    printf("Inorder Traversal\n");
    print_inorder(root);
}

До сих пор не работает. Любая помощь приветствуется, поскольку я довольно новичок в указателях.

...