Obtenir le facteur d'équilibre
Leçon 6 sur 16 du cours Arbre AVL - Série Structures de données n°10 de Coddy.
Le facteur d'équilibre d'un nœud est getHeight(node.left) - getHeight(node.right). Un nombre positif signifie que le côté gauche est plus haut, un nombre négatif signifie que le côté droit est plus haut, et 0 signifie qu'ils sont égaux.
Un nœud est considéré comme équilibré tant que son facteur d'équilibre est -1, 0 ou 1. Tout ce qui se trouve en dehors de cette plage (2 ou plus, ou -2 ou moins) est ce qui déclenche une rotation.
Défi
DébutantÉcrivez une méthode getBalance(node) sur AVLTree qui retourne 0 si node est null, sinon elle retourne getHeight(node.left) - getHeight(node.right).
Essayez vous-même
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "avltree.h"
static Node* mkNodeWithHeight(int h) {
Node* n = Node_create(0);
n->height = h;
return n;
}
int main(void) {
AVLTree* tree = AVLTree_create();
char line[256];
while (fgets(line, sizeof(line), stdin) != NULL) {
line[strcspn(line, "\r\n")] = '\0';
char lTok[64];
char rTok[64];
sscanf(line, "%63s %63s", lTok, rTok);
Node* root = Node_create(0);
root->left = NULL;
if (strcmp(lTok, "null") != 0) {
root->left = mkNodeWithHeight(atoi(lTok));
}
root->right = NULL;
if (strcmp(rTok, "null") != 0) {
root->right = mkNodeWithHeight(atoi(rTok));
}
printf("%d\n", AVLTree_getBalance(tree, root));
}
return 0;
}
Toutes les leçons de Arbre AVL - Série Structures de données n°10
2Projet Arbre AVL
Classe NodeClasse AVLTree