2016-03-01 3 views
1

Я реализовал код, который добавляет элементы в дерево и печатает их в порядке возрастания. Однако моя цель - изучить итераторы и заменить функцию inOrder() на функцию итератора. Как я могу это сделать?Итератор дерева в Java

import java.util.InputMismatchException; 
import java.util.Scanner; 
import javax.xml.soap.Node; 

class Tree 
{ 
    public final int mVal; 
    public Tree mLeft; 
    public Tree mRight; 
    public Node next; 
    public Tree(int val) 
    { 
     mVal = val; 
    } 
    public void add(int val) 
    { 
     if (val < mVal) 
     { 
      if (mLeft == null) 
      mLeft = new Tree(val); 
     else 
      mLeft.add(val); 
     } 
     else 
     { 
      if (val > mVal) 
      { 
      if (mRight == null) 
      mRight = new Tree(val); 
      else 
      mRight.add(val); 
      } 
     } 
    } 

    public String inOrder() 
    { 
      return ((mLeft == null) ? "" : mLeft.inOrder()) 
      + mVal + " " 
      + ((mRight == null) ? "" : mRight.inOrder()); 
    } 

    public static void main(String[] args) 
    { 
     Tree t = new Tree(8); 
     Scanner scanner = new Scanner(System.in); 
     boolean continueLoop = true; // determines if more input is needed 
     for (int i = 1; i < 9; ++i) 
      { 
      try // read two numbers and calculate quotient 
      { 
      System.out.print("Please enter a random integer : "); 
      int stackInt = scanner.nextInt(); 
      t.add(Integer.valueOf(stackInt)); 
      } // end try 
      catch (InputMismatchException inputMismatchException){ 
      System.err.printf("\nException: %s\n", inputMismatchException); 
      scanner.nextLine(); //discard input so user can try again 
      System.out.println("You must enter integers. Please try again.\n"); 
      } // end catch 
     } 
     System.out.println("Values in order = "+ t.inOrder()); 
    } 
} 

ответ

1

взгляд на эту картину

InOrder

Первый шаг: если узел имеет левого ребенка, посещение левого ребенка и сделать первый шаг с ребенком

Второй шаг: узел не имеет левого дочернего элемента (или мы уже посетили левый дочерний элемент), добавим его в список порядка

Третий шаг: первым шагом с правом ребенка

я не испытали его

@Override 
public String toString() { 
    return String.valueOf(mVal); 
} 
public String inOrder(Tree root) { 
    List<Tree> inOrder = new ArrayList<>(); 
    inOrderRecursively(root, inOrder); 
    return inOrder.toString(); 
} 

private void inOrderRecursively(Tree Node, List<Tree> inOrder) { 
    if (Node.mLeft != null) { 
     inOrderIt(Node.mLeft, inOrder); 
    } 
    inOrder.add(Node); 
    if (Node.mRight != null) { 
     inOrderIt(Node.mRight, inOrder); 
    } 
} 

поздравления