Вставка узла в двоичное дерево приводит к ошибке
Когда я использую указатели для создания узла в двоичном дереве, это дает мне ошибку сегментации, тогда как когда я использую двойные указатели, это работает просто отлично.
Мне кажется, что оба фрагмента кода довольно хороши, но тогда почему первый не работает?
Поскольку мы просто разыменовываем указатель в более позднем случае, почему он не работает, когда я использую только указатель?
Что я уже пробовал:
Это тот, который работает (двойные указатели)
void Insert(struct bnode **root, int n){ if(*root == 0){ temp = (struct bnode *) malloc (sizeof(struct bnode)); temp -> data = n; temp -> right = temp -> left = 0; *root = temp; return; }else{ temp = *root; while(temp != 0){ if(n >= temp -> data){ temp = temp -> right; }else{ temp = temp -> left; } } temp = (struct bnode *) malloc (sizeof(struct bnode)); temp -> data = n; temp -> right = temp -> left = 0; } }
Я хочу знать, почему приведенный ниже код не работает (указатели)
void Insert(struct bnode *root, int n){ if(root == 0){ temp = (struct bnode *) malloc (sizeof(struct bnode)); temp -> data = n; temp -> right = temp -> left = 0; root = temp; return; }else{ temp = root; while(temp != 0){ if(n >= temp -> data){ temp = temp -> right; }else{ temp = temp -> left; } } temp = (struct bnode *) malloc (sizeof(struct bnode)); temp -> data = n; temp -> right = temp -> left = 0; } }
Member 13037163
P. S-Я знаю, что функциональность моего кода неверна, но мне просто нужно знать причину такого поведения.
Jochen Arndt
На этот вопрос нельзя ответить, не увидев полный код (как вызывается Insert () и с каким корневым аргументом).
Member 13037163
Вставить (корень, число);
В первом случае (указатель)
Вставить (& root, num);
В более позднем случае (двойной указатель)
Patrice T
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.