Salut à tous !
Presque tout est dans le titre. Pour être plus précis, je souhaite obtenir sous forme de strings tous les chemins, en plus d'y avoir associé un double que je chope dans les feuilles de l'arbre.
L'idée est de faire un post-order tree traversal pour
- visiter la première feuille, lui demander le double et le début du chemin, stocker ça dans un vecteur de pair,
- allonger le vecteur à la prochaine feuille rencontrée
- Modifier les string contenues dans le vecteur quand on "remonte" dans l'arbre en dépilant les appels de fonction récursives (on dit comme ça ? )
Mais la sortie n'est pas la bonne. Lorsque je mets des std::cout un peu partout, la concaténation fonctionne, mais la sortie "finale" ne porte aucun trace du passage dans les noeuds internes (elle a juste assemblé les sorties des feuilles).
Je n'arrive pas trop à comprendre où est le souci...
Auriez-vous une piste ?
Merci d'avance !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 typedef std::vector<std::pair<std::string, double> > vAxesPos; vAxesPos BayesianModel::RecursivePositionsGetter(const KaryTree & e) { vAxesPos collectedPos; DataTypeForTree& r_temp = e.m_data; if(e.HasAtLeastAChild() == true ) { // RECURSION for(auto pChild : e.GetChildren()) { vAxesPos childPos = RecursivePositionsGetter((*pChild)); collectedPos.insert( collectedPos.end(), childPos.begin(), childPos.end() ); } // TREATMENT if(e.HasAParent() == true) { PriorFunctionForAModelParameter& r_Data = dynamic_cast<PriorFunctionForAModelParameter&>(r_temp); for(auto it : collectedPos) it.first = r_Data.GetInformedParameterName() + "." + r_Data.GetFunctionName() + "." + it.first ; } else if(e.HasAParent() == false) { IMathematicalParametrizedFunction& r_Data = dynamic_cast<IMathematicalParametrizedFunction&>(r_temp); for(auto it : collectedPos) it.first = r_Data.GetFunctionName() + "." + it.first ; } } else if(e.HasAtLeastAChild() == false) { PriorFunctionForAModelParameter& r_Data = dynamic_cast<PriorFunctionForAModelParameter&>(r_temp); DataTypeForTree& r_parent = e.m_parent->m_data; IBayesianNetworkElements& r_ParentData = dynamic_cast<IBayesianNetworkElements&>(r_parent); std::string informedParamName = r_Data.GetInformedParameterName(); double informedParamValue = r_ParentData.GetValueOfParameter(informedParamName); std::pair<std::string, double> BrandNewAxePos(informedParamName, informedParamValue); collectedPos.push_back(BrandNewAxePos); } return collectedPos; }
Partager