В чем проблема с этой функцией

голоса
1

привет я писал BST и написал следующие функции для добавления ребенка.

void addChild(T value)  
{  
  temp = root;  
  while(0 != temp)  
  {  
     temp1 = temp;  
     if(value  > temp->getValue())  
          temp = temp->getRightChild();   
      else  
           temp = temp->getLeftChild();  
  }  
  if(temp1->getValue() > value)  
  {   
       temp1->setRightChild(new Child(value));  
  }  
  else  
  {  
       temp1->setLeftChild(new Child(value));  
  }  
}  

Я даю 23 12 122 1 121 15 в качестве входных данных. Корневая узел 23, который я создаю в конструкторе класса.

Проблема: Когда я делаю обход дерева я получаю только 23 и 15 в качестве выходного сигнала. Вопрос : Что я делаю неправильно в этой функции?

Задан 23/12/2010 в 10:42
источник пользователем
На других языках...                            


3 ответов

голоса
1

Пытаться:

if(value > temp1->getValue()) 

... в противном случае вашего состояние вставки отличается от вашего поиска места в приведенной выше цикле.

Ответил 23/12/2010 в 10:47
источник пользователем

голоса
1

Условия смешиваются.

если (значение> TEMP-> GetValue ()): GetRight

является противоположностью

если (значение temp1-> GetValue ()>): setRight

Попробуйте просто изменить последнее условие.

Ответил 23/12/2010 в 10:47
источник пользователем

голоса
0

Я согласен с предыдущими ответами капитаном и КЕЭ~D, но они не объясняют , суровые, мы должны сказать, underpopulation из дерева. Возможная проблема заключается в том , что вы добавляете ценность как ребенок temp1 , отбрасывая предыдущий ребенок в целом. Это, вероятно , сделано в T :: setRightChild () и функции T :: setLeftChild ().

Ответил 23/12/2010 в 10:52
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more