2016-12-15 7 views
1

Kann jemand mir den Weg zeigen, einen Binärbaum zu loopen, um alle Knoten zu durchlaufen. Ich werde Studenten durch Einfügen Methode hinzufügen. Ich möchte nur alle Schüler Objekte drucken. Das ist mein BST:Iterate durch binäre Suche Baum Java

public class BinarySearchTree<Students extends Comparable<? super Student>> { 
    public static BinaryNode root; 

    public BinarySearchTree() { 
     this.root = null; 
    } 

public void insert(Student student) { 

     root = insert(student, root); 
    } 

    protected BinaryNode<Student> insert(Student student, BinaryNode<Student> t) { 
     if (t == null) { 

      t = new BinaryNode<Student>(student); 
     } else if (student.compareTo(t.element) < 0) { 
      t.left = insert(student, t.left); 
     } else if (student.compareTo(t.element) > 0) { 
      t.right = insert(student, t.right); 
     } else { 
      // throw new DuplicateItemException(student.toString()); 
     } 
     return t; 
    } 
} 

Knoten Klasse:

class BinaryNode<Student> { 
    // Constructor 
    BinaryNode(Student theElement) { 
     element = theElement; 
     left = right = null; 
    } 

    // Data; accessible by other package routines 
    Student element; // The data in the node 
    BinaryNode<Student> left; // Left child 
    BinaryNode<Student> right; // Right child 
} 
+0

Ihre insert-Methode nie Wurzel zuordnet, gibt sie nur neu erstellte Knoten und Rückgabewert wird nie verwendet. –

+0

Ich denke, dass Sie einige Probleme in Ihrer Einfügemethode haben – thepaulo

+0

Ich habe Code bearbeitet. – Dilshan

Antwort

0

diese Methode In der BinarySearchTree Klasse:

public void inorder(BinaryNode node) { 
    if (node == null) { 
     return; 
    } 
    inorder(node.left); 
    System.out.print(...); //whatever you want to do with the node 
    inorder(node.right); 
} 

In ähnlicher Weise können Sie Preorder tun können und Nachbestellung Traversalen.

+0

Sein einziger Druck ein Knoten. Ich habe 2 Studenten eingefügt. Nach dem Aufruf von inorder() druckt es nur einen. – Dilshan

+0

Actullay, Ich suche etwas Ähnliches BinarySearchTree Studenten; für (Student Student: Studenten) {} – Dilshan

+0

Jeder gab Ihnen die gleichen Antworten. Wir können nicht alle falsch liegen. Sie können die BinarySearchTree-Klasse nicht mit der for-Schleife durchlaufen. Ihre Einfügemethode weist niemals root zu. –

0
public class BinarySearchTree<Students extends Comparable<? super Student>> { 
    public static BinaryNode root; 

    public BinarySearchTree() { 
     this.root = null; 
    } 
    ... 
    public void print() { 
     print(root); 
    } 

    public void print(BinaryNode<Student> node) { 
     if (node == null) { 
      return; 
     } 
     print(node.left); 
     doSomething(node.getStudent()); 
     print(node.right); 
    } 
} 
+0

Sein einziger Druck ein Knoten. Ich habe 2 Studenten eingefügt. Nach dem Aufrufen von print() wird nur einer gedruckt. – Dilshan

+0

Actullay, Ich suche etwas Ähnliches BinarySearchTree Studenten; für (Student Student: Studenten) {} – Dilshan

0

Es gibt 3 Möglichkeiten, binäre Suchbäume zu durchlaufen.

  • Vorbestellen

    public void preOrder(BinaryNode node) { 
        if (node == null) { 
         return; 
        } 
        doSomethig(node.element); // process node 
        preOrder(node.left); 
        preOrder(node.right); 
    } 
    
  • In Ordnung in diesem Fall Knoten um

    public void inOrder(BinaryNode node) { 
        if (node == null) { 
         return; 
        } 
        inOrder(node.left); 
        doSomethig(node.element); // process node 
        inOrder(node.right); 
    } 
    
  • Post-Ordnung

    0 durchlaufen werden
    public void postOrder(BinaryNode node) { 
        if (node == null) { 
         return; 
        } 
        postOrder(node.left); 
        postOrder(node.right); 
        doSomethig(node.element); // process node 
    } 
    

Sie haben eine von ihnen zu wählen und beispielsweise auszuführen:

preOrder(root); // where root is a handle to your BST