J'ai des problèmes pour convertir un arbre binaire enraciné au format newick. L'explication complète pour un tel format peut être trouvé: http://code.google.com/p/mrsrf/wiki/NewickTreeconvertir un arbre au format newick. java
Un exemple d'un format Newick serait la suivante:
pour un arbre T tel que http://www.cs.mcgill.ca/~cs251/OldCourses/1997/topic8/images/completetreetwo.gif la représentation Newick serait: (((8 , 9), (10,11)), ((12,13), (14,15))
le nœud interne deviendra la virgule tandis que les feuilles seront conservées.
ces arbres ont des nœuds internes qui auront toujours 2 enfants.
J'ai un problème en utilisant la récursivité pour sortir avec ce format newick. La sortie contient beaucoup trop de nœuds et d'accolades.
Tous les commentaires pour résoudre ce problème est apprécié ou même un algorithme itératif seraient accueillis
java.util.Stack d'importation;
Arbre public class {
....
public String inOrderNewick(Node root, String output) throws ItemNotFoundException {
if (root.hasChild()) {
output += "(";
output += inOrderNewick(root.child1, output);
output += ",";
output += inOrderNewick(root.child2, output);
output += ")";
return output;
} else {
return root.getSeq();
}
}
// edit: mis en œuvre le changement comme conseillé. mais la sortie désirée pour un arbre est ((S3, (S1, S2)), (S4, S5)) où la sortie réelle est (((S3, ((S3, (S1, S2)), (((S3, ((S3, (S1, S2)), (S4, S5))
Cela me dit qu'il ya des erreurs logiques. peut-être il est nécessaire d'avoir des drapeaux?
grâce, qui ne prend le nombre de ombles supplémentaire vers le bas mais il y a encore une erreur logique. la sortie je reçois pour l'arbre qui devrait être (S3, (S1, S2)), (S4, S5)) est (((S3, ((S3, (S1, S2)), (((S3, ((S3, (S1, S2)), (S4, S5)) Ai-je besoin de quelques drapeaux pour gérer ceci? – Esmond
Êtes-vous sûr que l'arbre a été correctement construit? –
Appelez pour la taille de l'arbre retourne 9 avec 5 feuilles et 4 nœuds internes Une traversée inorder renvoie S3 r2 S1 r2 S2 r4 S4 r3 S5 – Esmond