la conversion de la STB à la matrice
J'ai cherché partout et n'arrive pas à trouver toute l'aide pour cette question.. pour un projet d'école, j'ai un BST arbre et je dois mettre tous les services de renseignements de l'arbre dans un tableau int appelé BSTarray.
C'est ce que j'ai à ce jour:
public int [] toBSTArray() {
int size = 20;
int [] BSTarray = new int [size];
for(int i = 0; i <size; i++) {
makeArray(root);
BSTarray[i] = root.getValue();
}
return BSTarray;
}
//helper method called by toBSTArray
public void makeArray(BinarySearchTreeNode node) {
if (node != null) {
makeArray(node.getLeft());
makeArray(node.getRight());
//System.out.print(node.getValue() + " ");
}
}
Je pensais que cette méthode était censé aller dans l'arborescence, puis d'ajouter les valeurs qu'il trouve dans les différents indices dans la BSTarray, mais tout ce qu'il fait est d'ajouter le même nombre dans tous les index dans le tableau. Suis-je en train de faire quelque chose de mal avec la récursivité?
OriginalL'auteur Gcap | 2012-12-13
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
avec cette définition de la méthode:
J'ai pris un nœud de la structure est semblable à la vôtre. Bien sûr, la méthode ne doit pas être statique si vous ne l'utilisez pas dans une de manière statique.
Cette méthode pourrait ne pas être le plus efficace grâce à la liste de conversion, mais vous n'avez pas à s'embêter avec toute la taille des matrices. Si vous avez vraiment besoin de la fonction pour retourner un tableau, juste envelopper dans une autre fonction, ou laissez-la proposition de la fonction retourne un tableau (cela ferait-il nécessaire de convertir la liste à un tableau avant chaque retour).
Concernant votre code, vous itérer sur les
i
pour remplir le tableau d'ensemble (peu importe où vous savez que la taille d') mais de toujours définir la valeur à la valeur du nœud racine. C'est pourquoi vous devez toujours avoir la même valeur. VotremakeArray
la fonction s'appelle elle-même de manière récursive, mais il ne fait rien (même si vous ajoutez un sysout déclaration 😉 )Mise à jour:
Et pour la contrainte de l'utilisation de pas de listes, voici une autre version qui utilise uniquement les tableaux:
avec la définition de la méthode:
Noter que le résultat sera
results
, alors. La taille doit être supposées être plus le nombre de nœuds ou il doit être compté en parcourant l'arbre, avant d'.J'ai ajouté une version qui n'utilise pas les listes, voir ma mise à jour.
merci!!!! nous devons appeler à partir d'un pilote de classe, ce que j'ai fait le toBSTArray méthode à nouveau avec extractValues(n,les résultats,0); et j'ai le tableau "résultats" être retournés, mais il se termine à l'impression à la console comme ceci: [I@66780515
Le
[I@66780515
semble être juste la représentation de Chaîne de caractères le tableau Entier. Malheureusement, Java standard n'affiche pas toutes les valeurs lors de l'impression d'un tableau mais seulement[I@66780515
où le support indique que c'est un tableau, leI
représente l'Entier et le nombre est juste le code de hachage de l'objet.OriginalL'auteur sebastian_oe
Comment à ce sujet: (Votre récursivité ne pas apporter des modifications au tableau)
OriginalL'auteur CEGRD
Vous pouvez parcourir l'arborescence d'ajouter les éléments dans un tableau. Par exemple, à l'aide de précommande de la traversée, vous auriez quelque chose comme ceci:
OriginalL'auteur Rafael