-4

私はこれを理解するのに非常に苦労しています。私の宿題は次のとおりです (宿題を入力するのは、私の目標を完全に理解してもらうためであり、あなたに宿題をしてもらうためではありません):

この章で説明する Linked Binary Tree クラスの実装を完了します。具体的には、getRight、contains、isEmpty、toString、preorder、および post order 操作の実装を完了します。

書き方を知っているメソッドはすべて書きましたが (おそらくすべて間違っている可能性があります)、 ------> preorder メソッドはどのように記述すればよいですか? <------これまでのコードは次のとおりです(事前注文方法のセクションは下部にあります):(Googleでこれを何度も調査し、 Stackoverflowで何度も調査しましたが、まだ答えが見つかりませんでした。実際に行きました私の教授に直接連絡しますが、セカンドオピニオンもお願いします. 彼もまだ応答していません. ここでの主な問題は、私が想定しているようなコードを使用する人を見つけることです, つまり、イテレータクラスやノードクラスなど.

    //*******************************************************************
    //  LinkedBinaryTree.java       Java Foundations
    //
    //  Implements a binary tree using a linked representation.
    //*******************************************************************

    package javafoundations;

    import java.util.Iterator;
    import javafoundations.*;
    import javafoundations.exceptions.*;

public class LinkedBinaryTree<T> implements BinaryTree<T>
{
   protected BTNode<T> root;

   //-----------------------------------------------------------------
   //  Creates an empty binary tree.
   //-----------------------------------------------------------------
   public LinkedBinaryTree()
   {
      root = null;
   }

   //-----------------------------------------------------------------
   //  Creates a binary tree with the specified element as its root.
   //-----------------------------------------------------------------
   public LinkedBinaryTree (T element)
   {
      root = new BTNode<T>(element);
   }

   //-----------------------------------------------------------------
   //  Creates a binary tree with the two specified subtrees.
   //-----------------------------------------------------------------
   public LinkedBinaryTree (T element, LinkedBinaryTree<T> left,
      LinkedBinaryTree<T> right)
   {
      root = new BTNode<T>(element);
      root.setLeft(left.root);
      root.setRight(right.root);
   }

   //-----------------------------------------------------------------
   //  Returns the element stored in the root of the tree. Throws an
   //  EmptyCollectionException if the tree is empty.
   //-----------------------------------------------------------------
   public T getRootElement()
   {
      if (root == null)
         throw new EmptyCollectionException ("Get root operation "
            + "failed. The tree is empty.");

      return root.getElement();
   }

   //-----------------------------------------------------------------
   //  Returns the left subtree of the root of this tree.
   //-----------------------------------------------------------------
   public LinkedBinaryTree<T> getLeft()
   {
      if (root == null)
         throw new EmptyCollectionException ("Get left operation "
            + "failed. The tree is empty.");

      LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();
      result.root = root.getLeft();

      return result;
   }

   //-----------------------------------------------------------------
   //  Returns the element in this binary tree that matches the
   //  specified target. Throws a ElementNotFoundException if the
   //  target is not found.
   //-----------------------------------------------------------------
   public T find (T target)
   {
      BTNode<T> node = null;

      if (root != null)
         node = root.find(target);

      if (node == null)
         throw new ElementNotFoundException("Find operation failed. "
            + "No such element in tree.");

      return node.getElement();
   }

   //-----------------------------------------------------------------
   //  Returns the number of elements in this binary tree.
   //-----------------------------------------------------------------
   public int size()
   {
      int result = 0;

      if (root != null)
         result = root.count();

      return result;
   }

   //-----------------------------------------------------------------
   //  Populates and returns an iterator containing the elements in
   //  this binary tree using an inorder traversal.
   //-----------------------------------------------------------------
   public Iterator<T> inorder()
   {
      ArrayIterator<T> iter = new ArrayIterator<T>();

      if (root != null)
         root.inorder (iter);

      return iter;
   }

   //-----------------------------------------------------------------
   //  Populates and returns an iterator containing the elements in
   //  this binary tree using a levelorder traversal.
   //-----------------------------------------------------------------
   public Iterator<T> levelorder()
   {
      LinkedQueue<BTNode<T>> queue = new LinkedQueue<BTNode<T>>();
      ArrayIterator<T> iter = new ArrayIterator<T>();

      if (root != null)
      {
         queue.enqueue(root);
         while (!queue.isEmpty())
         {
            BTNode<T> current = queue.dequeue();

            iter.add (current.getElement());

            if (current.getLeft() != null)
               queue.enqueue(current.getLeft());
            if (current.getRight() != null)
               queue.enqueue(current.getRight());
         }
      }

      return iter;
   }

   //-----------------------------------------------------------------
   //  Satisfies the Iterable interface using an inorder traversal.
   //-----------------------------------------------------------------
   public Iterator<T> iterator()
   {
      return inorder();
   }

   //-----------------------------------------------------------------
   //  The following methods are left as programming projects.
   //----------------------------------------------------------------- 
   public LinkedBinaryTree<T> getRight() 
   { 
       if(root == null)
       {
           throw new EmptyCollectionException ("Get right operation "
                    + "failed. The tree is empty.");
       }
       LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();
       result.root = root.getRight();

       return result;
   }  

   public Boolean Contains(T item) 
   {
       BTNode<T> result;
       result = root;
       if(root == null)
       {
           throw new EmptyCollectionException ("\'Contains\' operation "
                    + "failed. The tree is empty.");
       }
       if(root == item)
       {
           return true;
       }
       while(result.getElement() != item)
       {
           result = result.getRight();
       }
       while(result.getElement() != item)
       {
           result = result.getLeft();
       }
       if(root == null && result.getElement() != item)
       {
           return false;
       }
       return true;         
   }

   public boolean isEmpty()
   {
       if(root == null)
       {
           return true;
       }
       else
       {
           return false;
       }
   }

   public String toString() 
   {
      return ("There are " + root.count() + " items in this tree.");

   }

   public Iterator<T> preorder() 
   {

   }


   // public Iterator<T> postorder() { }
}    

また、必要な場合は、他のクラスへのリンクを次に示します。 LinkedQueue BTNode

4

1 に答える 1

1

事前注文は次のようになります。

  1. 現在のノードにアクセスする
  2. 左ノードが存在する場合は、左ノードの事前注文にアクセスします。
  3. 右側のノードが存在する場合は、右側のノードの事前注文にアクセスします。

これらのいくつかの手順で、事前注文方法を実装できると確信しています.

これの疑似コード:

function preOrder(Node node)
    //1. visit current node
    show(node->data)
    //2. if exists left node, visit pre order of left node
    Node left = node->left
    if (left is not null)
        preOrder(left)
    //3. if exist right node, visit pre order of right node.
    Node right = node->left
    if (right is not null)
        preOrder(right)

これは宿題なので、実装はあなた次第です。

于 2013-04-27T02:54:44.200 に答える