2017-05-16 10 views
-2

Ich studiere Java, und ich habe einige Fragen:binärer Suchbaum rekursiv insert-Methode

Dies ist ein binary search tree und ich möchte die insert Methode erstellen. Was stimmt nicht mit dem, was ich getan habe?

Ich denke left und right sind Node, aber ich weiß nicht, wie es zu benutzen, weil Node Ich weiß, wie

ist
public Node(int data, Node next) 

Was muss ich tun?

public class BST { 
private Comparable key; 
private BST left, right; 

public BST(Comparable key) { 
    this.key = key; 
    this.left = null; 
    this.right = null; 
} 

public boolean insert(Comparable key) { 
    if (key.compareTo(this.key) < 0) { 
     if (this.left == null) { 
      System.out.println(key + " : insert success"); 
      this.left = left; 
      return true; 
     } else { 
      insert(key); 
     } 
    } else if (key.compareTo(this.key) > 0) { 
     if (this.right == null) { 
      this.right = right; 
      System.out.println(key + " : insert success"); 
      return true; 
     } else { 
      insert(key); 
     } 
    } 
    System.out.println(key + " : insert fail"); 
    return false; 
} 
public static void main(String[] args) { 
    BST b = new BST("B"); 

    System.out.println("========== insert =========="); 
    b.insert("G"); 
    b.insert("D"); 
    b.insert("K"); 
    b.insert("A"); 
    b.insert("D"); 
    b.insert("J"); 
    b.insert("H"); 
    b.insert("C"); 
    b.insert("A"); 
    b.insert("F"); 
    b.insert("E"); 
    b.insert("N"); 
} 

}

Antwort

0

Sie nicht den Einsatz richtig tun, wenn Sie die Position, die Sie finden müssen einen neuen Knoten mit dem neuen Schlüssel erstellen und das Blatt, zum Beispiel in der ersten Check machen

 if (key.compareTo(this.key) < 0) { 
    if (this.left == null) { 
     System.out.println(key + " : insert success"); 
     this.left = new BST(key); 
     return true; 
    } else { 
     return insert(key); 
    } 

Sie müssen auch überprüfen, ob der gesendete Schlüssel bereits eingefügt und True zurückgegeben wird.

+0

Es gibt java.lang.StackOverflowError in this.left = new BST (key); – cardiban

+0

Ja, Sie haben ein paar Probleme in Ihrem Code, aber das ist das Konzept, ich habe meinen Code mit einigen festen –

+0

bearbeitet Kann ich wissen, was ist Ihr Code? – cardiban

Verwandte Themen