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

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

متوسط

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

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

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

فرض کنید آرایه‌ی [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

اعتبار

تصاویر را habere-et-dispertire با استفاده از PGF/TikZ اثر Till Tantau ساخته است.


منبع

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

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

در Exercism ثبت‌نام کنید تا Ruby را همراه با 21 مفهوم121 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.