2009-04-12 5 views
0

Hi Ich habe Probleme beim Einfügen auf der rechten Seite eines Knotens in einem Binärbaum ... Ich sehe nicht, warum die Ausnahme passiert. Dies ist die Methode zum Einsatz:TreeViolationException Problem

public void attachRight(BinaryTree<T> tree) { 
    if (right != null) { 
     throw new TreeViolationException(); 

    } 
    if (tree != null) { 
     tree.parent = this; 
     right = tree; 
    } 
} 

Dies ist der Code in meiner Hauptklasse

public class Test {

public static void main(String[] args) { 

    /* the tree to be built    30 
    *         / \ 
    *         12  16 
    *        /\ /\ 
    *        null 1 2 5 
    */ 

    //Create binary tree and set root to 30 
    BinaryTree<Integer> root = new BinaryTree<Integer>(); 
    root.makeRoot(30); 
    //System.out.println(root.getData()); //for verifying only 

    //Insert 12 -> left(30) 
    root.attachLeft(new BinaryTree<Integer>()); 
    root.left.setData(12); 

    //Insert 16 -> right(30) 
    root.attachRight(new BinaryTree<Integer>()); 
    root.right.setData(16); 

    //insert 1 -> right(12) 
    root.right.attachRight(new BinaryTree<Integer>()); 
    root.right.right.setData(1); 

    //insert 2 -> left(16) 
    root.right.attachLeft(new BinaryTree<Integer>()); 
    root.right.left.setData(2); 

    //insert 5 -> right(16) 
    root.right.attachRight(new BinaryTree<Integer>()); 
    root.right.right.setData(5); 

    System.out.println(root.getData()); 
    System.out.println(root.left.getData()); 
    System.out.println(root.right.getData()); 

} 

}

Ich bin nur in der Lage einzusetzen ist, 30, 12 und 16. Nicht sicher, was passiert .... Dies ist der Fehler, den ich bekomme, passiert es in der attachRight-Methode

Exception in thread "main" proj5.TreeViolationException bei proj5.BinaryTree.attachRight (BinaryTree.java:98)

TreeViolationException nur eine Klasse ist, dass ich, dass erstreckt Runtime

Antwort

1

Aus den gegebenen Informationen, die Ausnahme sollte von dieser Linie kommen:

//insert 5 -> right(16) 
root.right.attachRight(new BinaryTree<Integer>()); 

weil root.right.attachRight() bereits auf dieser Linie genannt:

//insert 1 -> right(12) 
root.right.attachRight(new BinaryTree<Integer>()); 

und root.right hat bereits rechten Knoten. Warum es früher kommt, ist derzeit unmöglich zu diagnostizieren. Sie sollten weitere Informationen bereitstellen (z. B. vollständige Implementierung der BinaryTree-Klasse).

+0

Ich denke // einfügen 1 -> rechts (12) root.right.attachRight (neu BinaryTree ()); sollte sein // einfügen 1 -> rechts (12) root.left.attachRight (neuer BinaryTree ()); –