zoukankan      html  css  js  c++  java
  • 树的孩子链表表示法

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

  • 相关阅读:
    2017蓝桥杯最大公共子串(C++B组)
    C++ memset函数用法
    2017蓝桥杯取位数(C++B组)
    2017蓝桥杯承压计算(C++ B组)
    安卓动画(Animation使用)
    2017蓝桥杯等差素数(C++B组)
    JSON取值前判断
    jstl
    centos到底下载哪个版本?
    HTML页面定时跳转方法
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3752267.html
Copyright © 2011-2022 走看看