使用JAVA中的List构建二叉排序树。其中,iterator方法不知道怎么样写,请大伙支援?代码如下:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class BinaryTreeList<E> extends AbstractSingleLinkedList<E> implements List<E> ,java.io.Serializable {
private static final long serialVersionUID = -5672690815694732101L;
private Entry<E> root;
private int size ;
public BinaryTreeList() {
this.root = null;
}
public boolean add(E e) {
Entry<E> newEntry = new Entry<E>(e,null,null);
if (this.root == null) {
this.root = newEntry;
} else {
Comparable<? super E> k = (Comparable<? super E>) e;
Entry<E> currentEntry = this.root;
Entry<E> parentEntry = null;
int result = 0;
while (currentEntry != null) {
result = k.compareTo(currentEntry.data);
parentEntry = currentEntry;
if (result > 0) {
currentEntry = currentEntry.rigthChild;
} else {
currentEntry = currentEntry.leftChild;
}
}
if (result > 0) {
parentEntry.rigthChild = newEntry;
} else {
parentEntry.leftChild = newEntry;
}
}
size ++;
return true;
}
public Entry<E> getRoot() {
return this.root;
}
/**
* 使用递归遍历tree
* @param tree
* @param result
* @return
*/
private void preOrder(Entry<E> tree,List<E> result) {
if (tree != null) {
preOrder(tree.leftChild,result);
result.add(tree.data);
preOrder(tree.rigthChild,result);
}
}
public List<E> showTree() {
List<E> result = new ArrayList<E>(size);
preOrder(getRoot(),result);
return result;
}
@Override
public Iterator<E> singleListIterator() {
/**
* 这个地方怎么样实现呢 ?
* 就是怎么样把递归写成循环?
*/
return new Iterator<E>() {
private Entry<E> current = root;
@Override
public boolean hasNext() {
return false;
}
@Override
public E next() {
return null;
}
@Override
public void remove() {
throw new UnsupportedOperationException("can not remove");
}
};
}
@Override
public E get(int index) {
throw new UnsupportedOperationException("can not get");
}
@Override
public int size() {
return size;
}
public static class Entry<E>{
E data;
Entry<E> leftChild;
Entry<E> rigthChild;
public Entry(E e,Entry<E> leftChild,Entry<E> rigthChild) {
this.data = e;
this.leftChild = leftChild;
this.rigthChild = rigthChild;
}
}
}
测试类如下:
import junit.framework.TestCase;
import org.junit.Test;
public class BinaryTreeListTest extends TestCase {
@Test
public void testAdd() {
BinaryTreeList<Integer> list = new BinaryTreeList<Integer>();
list.add(381);
list.add(12);
list.add(410);
list.add(9);
list.add(40);
list.add(394);
list.add(540);
list.add(35);
list.add(190);
list.add(476);
list.add(760);
list.add(146);
list.add(445);
list.add(600);
list.add(800);
//preOrder(list.getRoot());
for (Integer val : list.showTree()) {
System.out.print(val);
System.out.print('\t');
}
}
/*
public static void preOrder(BinaryTreeList.Entry<Integer> tree) {
if (tree != null) {
preOrder(tree.leftChild);
System.out.print(tree.data);
System.out.print('\t');
preOrder(tree.rigthChild);
}
}
*/
}
输出结果:
9 12 35 40 146 190 381 394 410 445 476 540 600 760 800
不足之处:BinaryTreeList 的对象不能使用foreach遍历出结果,必须先调用 list.showTree() 生成一个arrayList。求教:iterator怎么实现呢?