2016-12-15 3 views
1

Может ли кто-нибудь показать мне путь к циклу двоичного дерева, чтобы пересечь все узлы. Я добавлю студентов методом вставки. Я просто хочу напечатать все объекты студентов. Это мой BST:Итерация через двоичное дерево поиска 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; 
    } 
} 

узла Класс:

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

Ваш метод вставки никогда не присваивает корень, он просто возвращает вновь созданный узел и что возвращаемое значение никогда не используется. –

+0

Я думаю, что у вас есть некоторые проблемы в вашем методе insert – thepaulo

+0

Я отредактировал код. – Dilshan

ответ

0

Добавить этот метод к BinarySearchTree класса:

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); 
} 

Подобным же образом вы можете сделать предзаказ и postorder обход.

+0

Его единственный печатный узел. Я вставил 2 студента. После вызова inorder() его печать будет только одной. – Dilshan

+0

Actullay, Im, похожего на это BinarySearchTree студентов; (Студенческий студент: студенты) {} – Dilshan

+0

Все те же ответы. Мы все не можем ошибаться. Вы не можете перебирать класс BinarySearchTree, используя для цикла. Ваш метод вставки никогда не присваивает root. –

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

Его единственный печатный один узел. Я вставил 2 студента. После вызова print() его печать только одна. – Dilshan

+0

Actullay, Im, что-то похожее на это BinarySearchTree студентов; для (Студенческий студент: Студенты) {} – Dilshan

0

Существует 3 способа пересечения двоичных поисковых деревьев.

  • Предзаказ

    public void preOrder(BinaryNode node) { 
        if (node == null) { 
         return; 
        } 
        doSomethig(node.element); // process node 
        preOrder(node.left); 
        preOrder(node.right); 
    } 
    
  • В заказ в этом случае узлы перемещаются в порядке

    public void inOrder(BinaryNode node) { 
        if (node == null) { 
         return; 
        } 
        inOrder(node.left); 
        doSomethig(node.element); // process node 
        inOrder(node.right); 
    } 
    
  • Post порядка

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

Вы должны выбрать один из них и запустить, например:

preOrder(root); // where root is a handle to your BST 
Смежные вопросы