树的孩子链表表示法
来源:互联网 发布:淘宝网店怎样上传宝贝 编辑:程序博客网 时间:2024/04/28 22:18
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) {}}