درخت متوازن (AVL)

درخت AVL: فاکتور توازن، چرخش‌های چهارگانه برای متوازن‌سازی و تضمین O(log n) در همه حالات

مشکل BST و راه‌حل AVL

دیدیم که BST با داده مرتب به لیست کج تبدیل می‌شود. درخت AVL (نام‌گذاری به افتخار مخترعانش: Adelson-Velsky و Landis) اولین درخت خودمتوازن‌شونده است: بعد از هر درج/حذف، توازن را چک و در صورت لزوم با چرخش اصلاح می‌کند — پس همیشه O(log n)!

فاکتور توازن

برای هر گره:

Balance Factor = ارتفاع(چپ) − ارتفاع(راست)
فاکتور توازنوضعیت
−۱، ۰، +۱متعادل ✓
بیشتر از +۱چپ‌سنگین ✗
کمتر از −۱راست‌سنگین ✗

چهار حالت عدم توازن و چرخش‌ها

  1. چپ‌سنگین چپ (LL): یک چرخش راست
  2. راست‌سنگین راست (RR): یک چرخش چپ
  3. چپ‌سنگین راست (LR): اول چرخش چپ فرزند، بعد چرخش راست
  4. راست‌سنگین چپ (RL): اول چرخش راست فرزند، بعد چرخش چپ

چرخش راست — شهود

گره ۲۰ به بالا می‌آید و ۳۰ به راستش می‌رود؛ ترتیب BST حفظ می‌شود! چرخش‌ها عملیات O(1) هستند و ساختار مرتب را خراب نمی‌کنند.

مزایای AVL

معایب

نکته: در عمل، Red-Black Tree (با توازن ملایم‌تر) در کتابخانه‌های استاندارد رایج‌تر است (مثل map در C++)؛ اما AVL مفهوم متوازن‌سازی را گویاتر نشان می‌دهد.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.

ابزارهای مرتبط