السلف المشترك الأدنى
الدرس 14 من 16 في دورة شجرة AVL - سلسلة هياكل البيانات #10 على Coddy.
إن السلف المشترك الأدنى لقيمتين هو أعمق عقدة تحتوي عليهما معاً في مكان ما ضمن شجرتها الفرعية. في شجرة البحث الثنائية، يمكنك العثور عليه دون الحاجة إلى مقارنة الأشجار الفرعية مباشرة: بدءاً من الجذر، إذا كانت كلتا القيمتين أصغر من العقدة الحالية، فإن الإجابة تكمن في مكان ما في الشجرة الفرعية اليسرى؛ وإذا كانت كلتاهما أكبر، فهي في الشجرة الفرعية اليمنى.
في اللحظة التي تقع فيها القيمتان في جانبين مختلفين (أو تساوي إحداهما العقدة الحالية)، تكون قد وجدت نقطة الانقسام: تلك العقدة هي السلف المشترك الأدنى.
التحدي
سهلاكتب دالة 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
3تحديات تدريبية
العنصر الأصغر رقم Kمجموع النطاقالسلف المشترك الأدنىالمرور بترتيب المستوياتالقيمة التالية لقيمة ما