/* ** Do all pending leaf checks. */ void leaf_do_pending_checks(void){ int rid; for(rid=bag_first(&needToCheck); rid; rid=bag_next(&needToCheck,rid)){ leaf_check(rid); } bag_clear(&needToCheck); }
void convert_tree(node ** base_node, int next_hop){ /*node is a leaf*/ if(leaf_check((*base_node))==1){ if((*base_node)->next_hop==-1){ (*base_node)->next_hop = next_hop; } /*node isn't a leaf*/ }else{ int check=child_check(*base_node); char*new_prefix=malloc(sizeof(char)*(strlen((*base_node)->prefix)+strlen("1")+1)); /*node doesn't have left child*/ if(check==0){ strcpy(new_prefix, (*base_node)->prefix); strcat(new_prefix, "0"); (*base_node)->zero=Initialize_node(new_prefix); /*node doesn't have right child*/ }else if(check==1){ strcpy(new_prefix, (*base_node)->prefix); strcat(new_prefix, "1"); (*base_node)->one=Initialize_node(new_prefix); } /*node doesn't have next hop*/ if((*base_node)->next_hop!=-1){ convert_tree((&(*base_node)->zero), (*base_node)->next_hop); convert_tree((&(*base_node)->one), (*base_node)->next_hop); /*node has next hop*/ }else{ convert_tree((&(*base_node)->zero), next_hop); convert_tree((&(*base_node)->one), next_hop); } free(new_prefix); } return; }