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