مسیرها
/
ReScript
ReScript
/
تمرین‌ها
/
درخت جست‌وجوی دودویی
درخت جست‌وجوی دودویی

درخت جست‌وجوی دودویی

متوسط

دستورالعمل‌ها

درج و جست‌وجوی اعداد در یک درخت دودویی.

وقتی لازم است داده‌های مرتب‌شده را نمایش دهیم، آرایه ساختار داده‌ی مناسبی نیست.

فرض کنید آرایه‌ی [1, 3, 4, 5] را داریم و ۲ را به آن اضافه می‌کنیم تا به [1, 3, 4, 5, 2] تبدیل شود. حالا باید کل آرایه را دوباره مرتب کنیم! می‌توانیم این وضعیت را بهتر کنیم اگر توجه کنیم که فقط لازم است برای عنصر جدید [1, nil, 3, 4, 5] جا باز کنیم و بعد عنصر را در همان جایی که باز کرده‌ایم اضافه کنیم. اما این کار هنوز هم ایجاب می‌کند که بسیاری از عنصرها را یک خانه به پایین جابه‌جا کنیم.

با این حال، درخت‌های جست‌وجوی دودویی می‌توانند با داده‌های مرتب‌شده بسیار کارآمدتر کار کنند.

درخت جست‌وجوی دودویی از مجموعه‌ای از گره‌های به‌هم‌پیوسته تشکیل شده است. هر گره قطعه‌ای از داده (مثلاً عدد ۳)، متغیری به اسم left و متغیری به اسم right را در خود نگه می‌دارد. متغیرهای left و right به nil یا گره‌های دیگر اشاره می‌کنند. از آنجا که این گره‌های دیگر به نوبه‌ی خود گره‌های دیگری زیرشان دارند، می‌گوییم که متغیرهای left و right به زیردرخت‌ها اشاره می‌کنند. همه‌ی داده‌های زیردرخت چپ کوچک‌تر یا مساوی داده‌های گره‌ی فعلی است و همه‌ی داده‌های زیردرخت راست بزرگ‌تر از داده‌های گره‌ی فعلی است.

برای مثال، اگر گره‌ی داشتیم که داده‌ی ۴ را در خود داشت و داده‌ی ۲ را به آن اضافه می‌کردیم، درخت ما به این شکل می‌شد:

نموداری با گره‌ی ریشه‌ی ۴ و یک گره‌ی فرزند ۲.

      4
     /
    2

اگر بعد از آن ۶ را اضافه می‌کردیم، به این شکل می‌شد:

نموداری با گره‌ی ریشه‌ی ۴ و دو گره‌ی فرزند ۲ و ۶.

      4
     / \
    2   6

اگر بعد از آن ۳ را اضافه می‌کردیم، به این شکل می‌شد

نموداری با گره‌ی ریشه‌ی ۴، دو گره‌ی فرزند ۲ و ۶ و یک گره‌ی نوه‌ی ۳.

       4
     /   \
    2     6
     \
      3

و اگر بعد از آن ۱، ۵ و ۷ را اضافه می‌کردیم، به این شکل می‌شد

نموداری با گره‌ی ریشه‌ی ۴، دو گره‌ی فرزند ۲ و ۶ و چهار گره‌ی نوه‌ی ۱، ۳، ۵ و ۷.

          4
        /   \
       /     \
      2       6
     / \     / \
    1   3   5   7

اعتبار

تصاویر با استفاده از PGF/TikZ که Till Tantau ساخته است، توسط habere-et-dispertire ساخته شده‌اند.


منبع

Josh Cheek
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
ReScript Exercism

آماده‌اید درخت جست‌وجوی دودویی را شروع کنید؟

در Exercism ثبت‌نام کنید تا ReScript را همراه با 33 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.