Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الحصول على معامل التوازن

الدرس 6 من 16 في دورة شجرة AVL - سلسلة هياكل البيانات #10 على Coddy.

إنّ عامل التوازن للعقدة هو getHeight(node.left) - getHeight(node.right). الرقم الموجب يعني أن الجانب الأيسر أطول، والرقم السالب يعني أن الجانب الأيمن أطول، و 0 يعني أنهما متساويان.

تُعتبر العقدة متوازنة طالما أن عامل التوازن الخاص بها هو -1 أو 0 أو 1. أي شيء خارج هذا النطاق (2 أو أكثر، أو -2 أو أقل) هو ما يؤدي إلى عملية التدوير.

challenge icon

التحدي

مبتدئ

اكتب طريقة getBalance(node) في AVLTree تُرجع 0 إذا كان node فارغاً (null)، وإلا فإنها تُرجع getHeight(node.left) - getHeight(node.right).

جرّب بنفسك

#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;
}

جميع دروس شجرة AVL - سلسلة هياكل البيانات #10