J'ai une méthode pour trouver le successeur inorder suivant dans un arbre de recherche binaire (BST). La méthode "inorderSuccessor" prend n'importe quel noeud du BST en entrée et sort le successeur suivant. Le procédé et la classe de l'arbre sont définis comme suit:Temps Complexité de l'impression BST en utilisant la méthode successeur inorder
class BSTInorderSuccessor{
public static Node inorderSuccessor(Node node) {
if (node.right != null) {
return minValue(node.right);
}
Node parent = node.parent;
while (parent != null && node == parent.right){
node = parent;
parent = parent.parent;
}
return parent;
}
}
class TreeNode{
int data;
Node left;
Node right;
Node parent;
public TreeNode(int data){
this.data = data;
this.left = null;
this.right = null;
this.parent = null;
}
}
Supposons que la hauteur de la BST est H, et il y a N noeuds au sein de cette structure arborescente. Je sais que la complexité temporelle de la méthode "inorderSuccessor" est O (h).
Ma question est: Étant donné le plus petit nœud de la BST. Quand j'écris une méthode pour appeler continuellement "inorderSuccessor" pour imprimer tous les nœuds de la BST, quelle est la complexité totale du temps? Je pense que c'est O (n * h). Est-ce exact?
imprimer tous les nœuds dans le BST? cela ne serait-il pas 'O (* le nombre de nœuds dans le BST *)'? s'ils sont énumérés en ordre, précommercial, ou n'importe quel ordre? –
@AlexBollbach Il existe des moyens (bêtes) d'imprimer tout ce qui ne fonctionne pas en temps linéaire, comme faire un DFS pour imprimer tous les nœuds de profondeur 0, puis tous les nœuds de profondeur 1, etc., donc ce n'est pas tout déraisonnable d'une question. – templatetypedef
la question spécifie cependant l'utilisation d'une séquence inorder. –