דף הבית >>רקורסיות>>תכונות הרקורסיה>>עץ בינארי>>תיאור הפונקציה insert

תיאור הפונקציה insert

הפונקציה insert היא פונקציה רקורסיבית ,המקבלת כפרמטרים מצביע לשורש העץ וכן מצביע ל block חדש אותו אנו רוצים להכניס לעץ .נתאר את פעולתם בשלבים: לדוגמה ,אם הפונקציה רוצה להכניס 30 לעץ הבא אזי:
  1. בתחילה הפונקציה בודקת אם העץ ריק ,כלומר :אם r=NULL אם כן ,הblock החדש נקבע להיות השורשוהפונקציה מסתיימת.


  2. הפונקציה בודקת אם הענף שבו נמצאים ריק.אם כן ,הוא מקבל את הblock החדש והפונקציה מסתיימת.


  3. הפונקציה בודקת אם הבלוק החדש גדול או קטן מהנוכחי .אם הוא גדול יותר והצד הימני ריק - הבלוק מוכנס לשם והפונקציה מסתיימת. אם הוא קטן יותר,והצד השמאלי ריק -הוא יוכנס לצד שמאל של הענף הנוכחי,והפונקציה תסתיים.


  4. אם הוא גדול מהענף הנוכחי והצד הימני תפוס ,מתבצעת קריאה רקורסיבית ,כאשר הצומת בצד הימני מועבר כשורש .ולבסוף -אם הוא קטן יותר מן הענףהנוכחי והצד השמאלי תפוס ,תתבצע קריאה רקורסיבית,כאשר הצומת השמאלי מועבר כשורש .

קריאה ראשונה תהיה כאשר השורש הוא 25 .מכיוון ש 30 גדול מ 25 תתבצע קריאה שנייה כאשר השורש הוא 72.

30 קטן מ 72 ולכן תתבצע קריאה שלישית כאשר 32 הוא השורש ,ומכיוון ש 30 קטן מ 32 והאגף השמאלי של 32 ריק , הבלוק יוכנס לשם והפונקצייה תסתיים. העץ לבסוף יראה כך


הערה: בכל פנייה בעץ ,מקודם הגובה של הבלוק כך,שהבלוק מקבל את הערך הנכון מבחינת מיקומו בעץ.

תיאור הפונקציה tree::print
הפונקציה tree::print גם היא ריקורסיבית ,ויעודה להדפיס את נתוני העץ מהקטן אל הגדול . ז"א:
  1. נניח שהיא יודעת להדפיס עץ ברמה אחת נמוכה יותר .
  2. בהנחה שהפונקציה יודעת להדפיס את העץ ברמה אחת יותר נמוכה -נדפיס את הרמה האחרונה .הדפסת הרמה האחרונה מתבצעת בשלושה שלבים:
    • מדפיסים את צד שמאל ע"י הפונקציה ( )print ,שוב בהנחה שברמה אחת יותר נמוכה היא יודעת לעשות זאת.
    • מדפיסים את השורש.
    • מדפיסים את צד ימין ע"י קריאה רקורסיבית לפונקציה ( )print .
  3. בסיס הפונקציה הוא מקרה בו הפרמטר מועבר כשורש ריק ,ואז מסתיימת הפונקציה ללא קריאה ריקורסיבית.
הקודם
הבא