树是一个递归的数据结构,一棵树上的所有节点都可以被看成是一棵树,只不过除根节点外其他节点都比总树的规模小点而已。树的节点有三种:根节点(没有父亲节点),叶子节点(没有孩子节点),一般节点(既有父亲节点,也有孩子节点)。具体对结构的分析,几乎所有写数据结构的书中都有提到。
这棵树的实现花了好几天时间,碰到的最大问题是JAVA的泛型,在对泛型不是足够了解的事实下,似乎到处都碰到陷阱,幸亏在这中间得到了周树群同志的鼎力相助,所以在这里表扬他老人家一把:周树群是个好同志!
不管怎么说,一棵简单的树已经实现了,以后要用到树的地方就方便多了(目前为止我还没看到JDK里有专门的树的实现)。下面是这棵树的接口ITree,以及具体实现类OriginalTree。
ITree:
package utility.structure.def;
import java.util.Collection;
import java.util.List;
/**
*
* @author odie.tang
*
* @version 1.0 10/30/09
*/
public interface ITree{
E getData();
void set(E e);
E remove();
int getDepth();
int getLevel();
ITree getParent();
ITree getFirstChild();
ITree getLastChild();
ITree addChild(int childIndex,E e);
void addChildren(Collection extends E> children);
void addChildren(int childIndex, Collection extends E> children);
ITree addChild(E e);
ITree getChild(int childIndex);
E removeChild(int childIndex);
List> getChildren();
boolean isLeaf();
boolean isRoot();
ITree getRoot();
boolean remove(E e);
ITree getNode(E e);
}
OriginalTree:
package utility.structure;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.List;
import java.util.NoSuchElementException;
import utility.structure.def.ITree;
/**
* @author odie.tang
* @version 1.0 , 10/30/09
*/
public class OriginalTree implements ITree,Serializable {
private static final long serialVersionUID =