Чтобы ответить на вопрос о 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
, где необходимо проверить несколько фрагментов данных.
Вы никогда не пишете в своем дереве, только в локальном 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
}
}