حذف عنصر من شجرة AVL هو نفس حذفه من BST، باستثناء أن الشجرة قد تحتاج إلى إعادة التوازن. كما تمت مناقشته في قسم حذف العناصر من BST، لحذف عنصر من شجرة ثنائية، تحدد الخوارزمية أولاً العقدة التي تحتوي على العنصر. دع current يشير إلى العقدة التي تحتوي على العنصر في الشجرة الثنائية وparent يشير إلى أصل العقدة current. قد تكون العقدة الحالية فرعًا يسارًا أو فرعًا يمينًا للعقدة الأصل .
تنشأ حالتان عند حذف عنصر.
الحالة 1: العقدة الحالية لا تحتوي على فرع يسار، كما هو موضح في الشكل أدناه (أ). لحذف العقدة الحالية، ما عليك سوى توصيل العقدة الأصل بالعقدة الفرعية الصحيحة للعقدة الحالية، كما هو موضح في الشكل أدناه (ب). قد يكون ارتفاع العقد على طول المسار من العقدة الأصل حتى الجذر قد انخفض. للتأكد من أن الشجرة متوازنة، قم باستدعاء
مسار التوازن(parent.element);
الحالة 2: العقدة الحالية لها فرع أيسر. دع rightMost يشير إلى العقدة التي تحتوي على أكبر عنصر في الشجرة الفرعية اليسرى للعقدة الحالية وparentOfRightMost يشير إلى العقدة الأصلية لـ rightMost العقدة ، كما هو موضح في الشكل أدناه (أ). لا يمكن أن تحتوي العقدة rightMost على فرع فرعي أيمن ولكن قد يكون لها فرع فرعي أيسر. استبدل قيمة العنصر في العقدة الحالية بالقيمة الموجودة في العقدة rightMost، وقم بتوصيل العقدة parentOfRightMost بالطفل الأيسر للعقدة rightMost، واحذف العقدة rightMost، كما هو موضح في الشكل أدناه (ب).
قد يكون ارتفاع العقد على طول المسار من parentOfRightMost حتى الجذر قد انخفض. للتأكد من أن الشجرة متوازنة، قم باستدعاء
balancePath(parentOfRightMost);
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3