Может кто-нибудь сказать мне, что не так в моем коде вставки двоичного дерева поиска

Чтобы ответить на вопрос о compareTo: a.compareTo(b) должен вернуть что-то отрицательное, если a меньше b, положительное, если a больше b и 0, если они равны. Кроме того, если вы заказываете объекты, одно из правил, которым должно следовать упорядочение, заключается в том, что если a.compareTo(b) < 0, то b.compareTo(a) > 0. (Вы не можете иметь оба параметра «a меньше b», а «b меньше a»). Ваш compareTo, который просто возвращает -1 в любое время, когда карты не равны, не следует этому правилу. Чтобы исправить это, вам нужно будет принять решение о заказе. Как выглядит «сортированная колода»? Вероятно, все клубы вместе, а затем все бриллианты и т. Д., Что означает, что любая клубная карта будет меньше любой алмазной карты. Чтобы сделать это правильно, сначала вам нужно сравнить костюмы, а ранги - только если костюмы равны:

public int compareTo (Card aCard){
    int suitCompare = this.aSuit.compareTo(aCard.aSuit);
    if (suitCompare != 0)  {
        return suitCompare;
    }
    return this.aNumeral.compareTo(aCard.aNumeral);
}

compareTo на каждом enum вернет <0, 0 или >0. Таким образом, вы можете сравнить костюмы, вернуть значение <0 или >0, а затем сравнить ранги, если костюмы равны. Это общий подход для написания любого метода compareTo, где необходимо проверить несколько фрагментов данных.

-1
задан Alain Merigot 5 March 2019 в 16:28
поделиться

1 ответ

Вы никогда не пишете в своем дереве, только в локальном var ptr. В вашем коде вы должны вставить temp, когда найдете NULL-потомка.

void insert(int data)
{
  node* temp=new node;
  node *ptr=root;
  temp->data=data;
  temp->left=NULL;
  temp->right=NULL;
  if(ptr==NULL)
    {
      root=temp;        
    }
  else
    {
      while(1)
        {
          if(data<=(ptr->data)) {
            if(ptr->left) ptr=ptr->left;
            else {ptr->left=temp; break;}
          }
          else{
            if(ptr->right) ptr=ptr->right;
            else {ptr->right=temp; break;}
          }
        }//while loop ends here so that i get the ptr to be         
    }
}
0
ответ дан Alain Merigot 5 March 2019 в 16:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: