Ποιο είναι το πρόβλημα με αυτή τη λειτουργία

ψήφοι
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 ως είσοδο. Root είναι ο κόμβος 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

Συμφωνώ με τις προηγούμενες απαντήσεις από τον καπετάνιο και sje, αλλά δεν εξηγούν την σοβαρή, θα πρέπει να πούμε, underpopulation του δέντρου σας. Το πιθανό πρόβλημα είναι ότι μπορείτε να προσθέσετε αξία ως παιδί της Temp1 , απορρίπτοντας τις προηγούμενες παιδί εντελώς. Αυτό ίσως γίνει σε Τ :: setRightChild () και λειτουργεί Τ :: 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