2013-04-16 8 views
0

Пожалуйста, расскажите, как я могу создать двоичное дерево. Я искал google, но каждый раз, когда я нашел двоичное дерево поиска. Вот мой код.Как создать двоичное дерево (не двоичное дерево поиска)

bool createTree(node* Tree,int d) 
{ 
    bool ret_val=FALSE; 
    if(Tree->d==-1) 
    { 
     Tree->d=d; 
     return TRUE; 
    } 
    else 
    { 
     node* temp=(node*)malloc(sizeof(node*)); 
     if (temp==NULL) 
      return FALSE; 
     temp->l=NULL; 
     temp->r=NULL; 
     temp->d=d; 
     if(Tree->l==NULL) 
     { 
      Tree->l=temp; 
      return TRUE; 
     } 
     else if(Tree->r==NULL) 
     { 
      Tree->r=temp; 
      return TRUE; 
     } 
     else 
     { 
      ret_val=createTree(Tree->l,d); 
      if(ret_val) 
       return TRUE; 
      else 
       return createTree(Tree->r,d); 
     } 
     return FALSE; 
    } 
} 

После выполнения вы можете увидеть, что значение присваиваются дерево слева и продолжает идти в левую часть дерева. Пожалуйста, помогите мне заполнить мое двоичное дерево.

+0

В чем проблема? Вы получаете неправильный результат? Каков ожидаемый результат? Если вы хотите, чтобы мы помогли вам понять, что не так, чем дать некоторые подробности. – StoryTeller

+0

Возможно, эта последовательность кода не работает так, как вы хотите? 'TEMP-> л = NULL; TEMP-> г = NULL; если (Tree-> л == NULL) ...; else if (Tree-> r == NULL) ...; else ret_val = createTree (Tree-> l, d); ... ' – mah

+3

В чем разница между« двоичным деревом »и« деревом двоичного поиска »? –

ответ

1

Это неправильно

node* temp=(node*)malloc(sizeof(node*)); 

должно быть

node* temp=(node*)malloc(sizeof(node)); 

Но в C++ код, было бы лучше, чтобы написать

node* temp = new node; 

который проще и поэтому вы с меньшей вероятностью сделать ошибку

+0

'новый' не просто проще. Он также обеспечивает вызов конструктора, который 'malloc' не делает. Если класс имеет нетривиальный конструктор, использование 'malloc' для его выделения приводит к UB (если конструктор не будет вызван вручную позже). – Angew

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