J'évalue la complexité spatiale de l'algorithme suivant pour inverser un arbre:
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
TreeNode right = invertTree(root.right);
TreeNode left = invertTree(root.left);
root.left = right;
root.right = left;
return root;
}
Je sais que la complexité de l'espace est le nombre de fois que la pile d'appel est appelé qui est O (h) où h est la hauteur de l'arbre. Mais ma confusion est que, nous sommes à chaque niveau de la pile d'appel revenions un arbre qui prend un peu d'espace, pourquoi nous ne comptons pas cet espace? Je pense qu'il est parce que l'arbre est transmise par la fonction. Mais comment expliquez-vous cet espace? Java est passé par référence, combien l'espace est repris par la référence à chaque niveau de la pile d'appel?
L'espace nécessaire pour une référence d'objet est constant. Il ne dépend pas de ce que vous faites référence. L'espace nécessaire pour la référence à la racine de l'arbre est le même que l'espace nécessaire pour une référence à une feuille.
En général, vous pouvez supposer chaque appel à une méthode en Java prend la même quantité d'espace sur la pile. Il n'y a aucun moyen d'allouer de la mémoire sur la pile (ou, pas encore au moins). Dans cette méthode, aucun objet sont créés ou détruits sur le tas, de sorte que le seul espace utilisé est l'espace pour les cadres de pile.