//------------------------------------------------------------------------------ // Fill in weight, degree, etc. void Tree::buildtraverse (NodePtr p) { if (p) { p->SetWeight (0); /*p->SetModelCategory(vector<double>(1,1.0)); //added by BCO p->SetStateOrder(vector<int>(1,0)); //Added by BCO p->SetStateTimes(vector<double>(1,0.0)); //Added by BCO*/ p->SetDegree (0); buildtraverse (p->GetChild ()); buildtraverse (p->GetSibling ()); if (p->IsLeaf()) { Leaves++; p->SetWeight (1); /*p->SetModelCategory(vector<double>(1,1.0)); //Added by BCO p->SetStateOrder(vector<int>(1,0)); //Added by BCO p->SetStateTimes(vector<double>(1,0.0)); //Added by BCO*/ } else { Internals++; } if (p != Root) { p->GetAnc()->AddWeight (p->GetWeight()); p->GetAnc()->IncrementDegree(); } } }
//------------------------------------------------------------------------------ void Tree::getNodeHeights(NodePtr p) { if (p) { p->SetHeight (Leaves - p->GetWeight ()); if (p->GetHeight() > MaxHeight) MaxHeight = p->GetHeight(); getNodeHeights (p->GetChild()); getNodeHeights (p->GetSibling()); } }
//------------------------------------------------------------------------------ bool RightOrder::MustSwap (NodePtr p, NodePtr q) { return (p->GetWeight() > q->GetWeight()); }
//------------------------------------------------------------------------------ bool LeftOrder::MustSwap (NodePtr p, NodePtr q) { return (p->GetWeight() < q->GetWeight()); }