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) {
}
}