Il s'agit d'une opération commune à l'arbre binaire. Résumé:
Définissons la structure de données du nœud, comme suit:
Copier le code du code comme suit:
Classe Treenode {
valeur char;
Treenode Left = null;
Treenode à droite = null;
Treenode (char _val) {
this.val = _val;
}
}
1. Profondeur d'arbre binaire
Cela peut être reculé et la profondeur du sous-arbre gauche est trouvée et la profondeur de l'arbre enfant droit peut être utilisé.
Copier le code du code comme suit:
// Obtenez la profondeur maximale
Public static int getMaxDepth (Treenode root) {{
if (root == null)
Retour 0;
autre {
int Left = GetMaxDepth (root.left);
int droit = getMaxDepth (root.richt);
Retour 1 + math.max (gauche, droite);
}
}
2. Largeur binaire
Utilisez la file d'attente pour traverser la couche d'arbre binaire. Une fois la couche précédente terminée, tous les nœuds de la couche suivante ont été placés dans la file d'attente. Par analogie, vous pouvez trouver la largeur maximale de l'arbre binaire dans la couche suivante.
Copier le code du code comme suit:
// Obtenez la largeur maximale
public static int getMaxWidth (timeode root) {{
if (root == null)
Retour 0;
File d'attente <goudron
int maxwitdth = 1;
queue.add (root);
While (true) {
int len = queue.size ();
if (len == 0)
Casser;
Tandis que (len> 0) {// Si la couche actuelle, il y a des nœuds
Traitez t = queue.poll ();
Len-;
if (t.left! = null)
queue.add (t.left);
if (t.Right! = null)
queue.add (T.Right);
}
maxwitdth = math.max (maxwitdth, queue.size ());
}
Retourner maxwitdth;
}