import tree.PTree.PTNode; //树的孩子链表表示法 public class CTree<AnyType>{ int max=100; int n,root,parent,child; PLNode<AnyType> rootNode; CTNode<AnyType> firstChild; PLNode nodes[]=new PLNode[max]; class CTNode<AnyType>{ //孩子结点 int Child; CTNode<AnyType> nextChild; public CTNode(int child){ this.Child=child; nextChild=null; } } class PLNode<AnyType>{ //双亲结点 AnyType data; CTNode<AnyType> firstChild; public PLNode(AnyType data){ this.data=data; firstChild=null; } } public CTree(){ rootNode=null; n=0; } public boolean isEmpty(){ return n==0; } public int childCount(int idx){ //孩子个数 if(nodes[idx].firstChild==null){ return 0; } int count=1; CTNode p=nodes[idx].firstChild; while(p.nextChild!=null){ p=p.nextChild; count++; } return count; } public CTNode getChild(int n,int idx){ //获取第idx个孩子 if(childCount(n)<idx){ return null; } CTNode p=nodes[n].firstChild; for(int i=1;i<idx;i++){ p=p.nextChild; } return p; } public PLNode assign(AnyType data){ //生成一个双亲结点 PLNode newNode=new PLNode(data); return newNode; } public CTNode ass(int child){ CTNode newChild=new CTNode(child); return newChild; } public void insert(AnyType data,int parent){ //添加 if(parent==-1){ //根节点 rootNode=new PLNode(data); nodes[0]=rootNode; n++; } else{ nodes[n]=assign(data); CTNode newChild=new CTNode(n); if(childCount(parent)==0){ nodes[parent].firstChild=newChild; } getChild(parent,childCount(parent)).nextChild=newChild; n++; } } public static void main(String[] args) { } }