+
+void ComponentTree::branches (Node* n, map<Node*,size_t> & b){
+ if (n->_children.empty() && n->_parent != 0){
+ Node* p = n;
+ while (p->_parent != 0 && p->_children.size() < 2)
+ p = p->_parent;
+ ++b[p];
+ return;
+ }
+ for (vector<Node*>::iterator c = n->_children.begin();
+ c != n->_children.end(); ++c){
+ branches(*c,b);
+ }
+}
+
+size_t ComponentTree::shortBranches(){
+ map<Node*,size_t> br;
+ branches(_root,br);
+ if (_root->_children.size() < 2 && _root->_comp.sign != 0){
+ br[_root]++;
+ }
+ size_t sb = 0;
+ for (map<Node*,size_t>::iterator b = br.begin(); b != br.end(); ++b){
+ if (b->second == 1)
+ ++sb;
+ }
+ return sb;
+}
+