Dans le cadre de ma tâche, un arbre d'expression m'a été attribué et je dois le convertir en correctif avec O (n) d'exécution. Par exemple,Création d'une chaîne de données de post-commande d'un arbre donné
Pour convertir cet arbre "((1 V (2 H (3 V 4))) H (5 V 6))". Je ne pensais pas à un moyen de le convertir directement en infixe, alors j'ai pensé à le convertir en post-fix et en in-fix. (S'il y a une meilleure façon, dites-le moi).
Maintenant, mon problème est de convertir l'arbre en commande. J'ai essayé les suivantes:
private String treeToPost(Node node, String post) {
if (node != null) {
treeToPost(node.left, post);
treeToPost(node.right, post);
post = post + node.data.getName();
}
return post;
}
Maintenant, j'ai deux problèmes avec cette méthode, la première est que cela ne fonctionne pas, car il enregistre uniquement le dernier nœud, il a voyagé, le second est que je suis pas sûr qu'il fonctionnera à O (n) car il devra créer une nouvelle chaîne à chaque fois. J'ai trouvé une solution à ce problème, mais elle utilisait StringBuilder que je ne suis pas autorisé à utiliser. J'ai pensé à faire un tableau de caractères pour enregistrer les données, mais parce que je ne connais pas la taille de l'arbre, je ne peux pas connaître la taille du tableau nécessaire. Merci pour votre temps :)
Votre algorithme enregistre uniquement le dernier nœud car vous ne sauvegardez pas les résultats de treeToPost (node.left, post) et treeToPost (node.right, post) – dehasi
Vous pouvez utiliser un inorder-traversal et insérer les valeurs de chaque nœud ils apparaissent dans l'arbre et insèrent une parenthèse ouvrante chaque fois que vous descendez d'un niveau (vers les feuilles) et un crochet de fermeture chaque fois que vous montez d'un niveau. Et c'est à peu près la façon dont vous créez une représentation infixée de votre arbre. Bien sûr, cela introduirait des parenthèses avec un seul terme à l'intérieur, mais ce n'est pas trop difficile à corriger, si nécessaire. – Paul