|
דף הבית >>רקורסיות>>תכונות
הרקורסיה>>עץ
בינארי>>תיאור הפונקציה insert
|
תיאור
הפונקציה insert
|
|
הפונקציה
insert היא פונקציה רקורסיבית ,המקבלת כפרמטרים מצביע לשורש
העץ וכן מצביע ל block חדש אותו אנו רוצים להכניס לעץ .נתאר
את פעולתם בשלבים: לדוגמה ,אם הפונקציה
רוצה להכניס 30 לעץ הבא אזי:
- בתחילה הפונקציה בודקת אם העץ ריק ,כלומר :אם r=NULL
אם כן ,הblock החדש נקבע להיות השורשוהפונקציה מסתיימת.
- הפונקציה בודקת אם הענף שבו נמצאים ריק.אם כן ,הוא מקבל
את הblock החדש והפונקציה מסתיימת.
- הפונקציה בודקת אם הבלוק החדש גדול או קטן מהנוכחי .אם
הוא גדול יותר והצד הימני ריק - הבלוק מוכנס לשם והפונקציה
מסתיימת. אם הוא קטן יותר,והצד השמאלי ריק -הוא יוכנס לצד
שמאל של הענף הנוכחי,והפונקציה תסתיים.
- אם הוא גדול מהענף הנוכחי והצד הימני תפוס ,מתבצעת קריאה
רקורסיבית ,כאשר הצומת בצד הימני מועבר כשורש .ולבסוף -אם
הוא קטן יותר מן הענףהנוכחי והצד השמאלי תפוס ,תתבצע קריאה
רקורסיבית,כאשר הצומת השמאלי מועבר כשורש .
|
|
|
|
קריאה ראשונה תהיה כאשר השורש הוא 25 .מכיוון
ש 30 גדול מ 25 תתבצע קריאה שנייה כאשר השורש הוא 72.
|
|
|
|
30 קטן מ 72 ולכן תתבצע קריאה שלישית כאשר
32 הוא השורש ,ומכיוון ש 30 קטן מ 32 והאגף השמאלי של 32 ריק
, הבלוק יוכנס לשם והפונקצייה תסתיים. העץ לבסוף יראה כך
|
|
|
|
הערה: בכל פנייה בעץ ,מקודם הגובה של הבלוק
כך,שהבלוק מקבל את הערך הנכון מבחינת מיקומו בעץ.
|
|
תיאור הפונקציה tree::print |
|
הפונקציה tree::print
גם היא ריקורסיבית ,ויעודה להדפיס את נתוני העץ מהקטן אל הגדול
. ז"א:
- נניח שהיא יודעת להדפיס עץ ברמה אחת נמוכה יותר .
- בהנחה שהפונקציה יודעת להדפיס את העץ ברמה אחת יותר נמוכה
-נדפיס את הרמה האחרונה .הדפסת הרמה האחרונה מתבצעת בשלושה
שלבים:
- מדפיסים את צד שמאל ע"י הפונקציה ( )print ,שוב בהנחה
שברמה אחת יותר נמוכה היא יודעת לעשות זאת.
- מדפיסים את השורש.
- מדפיסים את צד ימין ע"י קריאה רקורסיבית לפונקציה (
)print .
- בסיס הפונקציה הוא מקרה בו הפרמטר מועבר כשורש ריק ,ואז
מסתיימת הפונקציה ללא קריאה ריקורסיבית.
|
|
הקודם
|
|
הבא
|
|
|
|
|
|