2017-01-24 2 views
0

Я попытался реализовать BST следующим образом: . Созданная структура как NODE.it имеет два указателя влево и вправо и одно целое значение (данные).Реализация BST через структуру

#include<iostream> 
#include<stdio.h> 
using namespace std; 
struct node 
{ 
struct node*left; 
struct node*right; 
int data; 

}; 
    node* head1; 
    int bol=0; 

void insert1(int x) 
{ 


node* nodes=new node; 
nodes->left=NULL; 
nodes->right=NULL; 
nodes->data=x; 

    if(bol==0) 
    { 
    head1=nodes; 
     bol=1; 
    } 
    else 
{ 
    node* ptr=head1; 
while(ptr!=NULL) 
{ 

if(x<=ptr->data) 
{ 
    ptr=ptr->left; 

} 
else 
    { 

    ptr=ptr->right; 

    } 

} 
    ptr=nodes; 

} 
    } 





int main() 
{ 




int n,m; 
cout<<"Enter the size of first BST"<<endl; 
cin>>n; 


int arrayfirst[n]; 

for(int i=0;i<n;i++) 
{ 
cin>>arrayfirst[i]; 
insert1(arrayfirst[i]); 

} 

cout<<head1->data<<endl; 
cout<<head1->left->data<<endl; 
//printPreorder(head1); 

    } 

, но ошибка отображается, если я пытаюсь распечатать данные следующего узла в голову.

Заранее спасибо

+0

Когда вы использовали отладчик, были ли правильные значения в указателях? –

+0

Вы устанавливаете 'ptr = nodes', но вы должны фактически установить« left »или« right »родителя в узлы. Установка 'ptr' в' nodes' не изменяет указатели 'left' или' right' родителя. – user1952500

ответ

0

Вы настраиваете ptr = nodes, но на самом деле вы должны установить родитель left или right к nodes. Установка ptr на nodes не изменяет указатели родителя left или right.

Так что-то вроде:

{ 
    node* ptr=head1; 
    node *parent = NULL; 
    while(ptr != NULL) { 
     parent = ptr; 
     if(x <= ptr->data) { 
      ptr = ptr->left; 
     } 
     else { 
      ptr = ptr->right; 
     } 
    } 
    if (parent != NULL) { // this should always be true 
     if (parent->left == ptr) { 
      parent->left = nodes; 
     } else { 
      parent->right = nodes; 
     } 
    } 
} 

Примечание: приведенный выше код не тестировался, но описывает подход.

Смежные вопросы