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

السلف المشترك الأدنى

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

إن السلف المشترك الأدنى لقيمتين هو أعمق عقدة تحتوي عليهما معاً في مكان ما ضمن شجرتها الفرعية. في شجرة البحث الثنائية، يمكنك العثور عليه دون الحاجة إلى مقارنة الأشجار الفرعية مباشرة: بدءاً من الجذر، إذا كانت كلتا القيمتين أصغر من العقدة الحالية، فإن الإجابة تكمن في مكان ما في الشجرة الفرعية اليسرى؛ وإذا كانت كلتاهما أكبر، فهي في الشجرة الفرعية اليمنى.

في اللحظة التي تقع فيها القيمتان في جانبين مختلفين (أو تساوي إحداهما العقدة الحالية)، تكون قد وجدت نقطة الانقسام: تلك العقدة هي السلف المشترك الأدنى.

challenge icon

التحدي

سهل

اكتب دالة lca(tree, p, q) تعيد قيمة السلف المشترك الأدنى لـ p و q. يمكنك افتراض أن كلتا القيمتين موجودتان في الشجرة.

جرّب بنفسك

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "avltree.h"
#include "solution.h"

int main(void) {
    AVLTree* tree = AVLTree_create();
    char line1[4096];
    fgets(line1, sizeof(line1), stdin);
    char* tok = strtok(line1, " \n");
    while (tok != NULL) {
        AVLTree_insert(tree, atoi(tok));
        tok = strtok(NULL, " \n");
    }
    char line2[256];
    fgets(line2, sizeof(line2), stdin);
    int p0 = atoi(strtok(line2, " \n"));
    int p1 = atoi(strtok(NULL, " \n"));
    int result = lca(tree, p0, p1);
    printf("%d\n", result);
    return 0;
}

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