您的位置:首页 > 其它

树的孩子链表表示法

2013-11-03 15:51 369 查看
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
.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
=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) {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: