Ejemplo n.º 1
0
setTreeNodes UnorderedTree::TreeComponents(TreeNodes *t,bool bCanonical=false){
    //Returns the components ( subtree of next level) of a tree
    setTreeNodes setTreeComponents;
    //Insert into a set, the components
    TreeNodes::iterator itTreeNodes;
    Integer level=(*t)[0];
    TreeNodes component;
    itTreeNodes=t->begin();
    int i=0;
	bool blnend=false;
    while(i<t->size() &&itTreeNodes!=t->end()) {
		//The components start at level 0, the canonical form no
		if (*itTreeNodes!=level) component.push_back( (*itTreeNodes)-(bCanonical ? 0 :level));
        ++itTreeNodes;i++;
        if (itTreeNodes==t->end()) 
			blnend=true;
		else if((*itTreeNodes)<= level+1 )
			blnend=true;
		if (blnend==true){
                  blnend=false;
				  if(component.size()>0){ 
					  setTreeComponents.insert(bCanonical ? CanonicalForm(component): component );
                          component.clear();   
                  }
        }                        
    }
    return setTreeComponents;       
}
Ejemplo n.º 2
0
TreeNodes UnorderedTree::CanonicalForm(TreeNodes t){
    //Returns recursively the CanonicalForm of a tree
    if (t.size()<2) return t;
    setTreeNodes setTreeComponents = TreeComponents(&t,true);
    Integer level=t[0]; 
  
    TreeNodes tn;
    tn.push_back(level);
    setTreeNodes::reverse_iterator itset;
    TreeNodes::iterator iteTreeNodes;
    for (itset=setTreeComponents.rbegin();itset!=setTreeComponents.rend();++itset){
        TreeNodes t1=(*itset);
        for (iteTreeNodes=t1.begin();iteTreeNodes!=t1.end();++iteTreeNodes){
            tn.push_back((*iteTreeNodes));
            }
            }
    return tn;   
}