עזרה בש"ב עם עצים בינאריים

tribute

New member
עזרה בש"ב עם עצים בינאריים

היי אני צריך קצת עזרה עם ש"ב בעצים הבינאריים אם אתם יכולים לעזור לי בבקשה 1) כתוב פונקציה רקורסיבית לחישוב סכום הנתונים המאוחסנים בעץ נתון 2) כתוב פונקציה המחזירה את מספר הצמתים של עץ שבהם נתונים זוגיים 3) כתוב אלגוריתם צאצא?(Y,X,T), הבודק אם קיימים בעץ T שני צמתים X ו-Y, כך ש-Y הוא צאצא של X.
 

GuestOfHonor

New member
אין בעיות

בשלושת המקרים אתה צריך לבצע 'מעבר על העץ'. דהיינו לעבור על כל הצמתים בעץ ולמצוא משהו או לבצע איזשהי פעולה. איך עושים את זה? כותבים פונקציה רקורסיבית, שמקבלת בתור בסיס כפרמטר צומת מסויים, ומה שהיא עושה זה 'בצע פעולה X עבור הצומת הזה, ואז על התת עץ השמאלי שלו ועל התת עץ הימני שלו'. כל זה בטח נשמע נורא מבלבל, אז בוא נעשה בתור דוגמא את 1. ב1, אתה צריך לסכום את האיברים בעץ בינארי מסויים. הפונקציה הרקורסיבית שלך, כמו שאמרנו, תקבל כפרמטר איזשהו צומת בעץ. לכל צומת בעץ אנחנו יודעים את הערך שלה (איזשהו מספר במקום הזה), את הבן השמאלי שלה (משתנה מסוג צומת גם הוא) ואת הבן הימני (כנ"ל). תסכים איתי שאם הפונקציה שלי אמורה לסכום את האיברים בתת עץ הנתון, אז דרך לעשות את זה 'במילים' זה להגיד "תביא לי את הערך של הצומת הזה, פלוס הסכום של כל מה שנמצא בתת עץ הימני שלו, פלוס את כל מה שנמצא בתת עץ השמאלי שלו". וזה בדיוק מה שהפונקציה עושה ומה שהיא תחזיר. זה יראה משהו כזה, בג'יבריש : סכום(שורש) { תחזיר שורש.מידע + סכום(שורש.בן_ימני) + סכום(שורש.בן_שמאלי); } זה לא בדיוק מספיק, כי לא תמיד יש הבן השמאלי והבן הימני קיימים. במקרה כזה, מן הסתם הסכום יהיה אפס, ואז הפונקציה תראה ככה : סכום(שורש) { אם שורש הוא null תחזיר 0; אחרת תחזיר שורש.מידע + סכום(שורש.בן_ימני) + סכום(שורש.בן_שמאלי); } תרגם את זה לפסקלית, צייר לך איזה עץ ותראה אם זה עובד לך על העץ. התרגיל השני די דומה רק שמבום לסכום ערכים הוא מוסיף 1 כל פעם שהשורש הנוכחי הוא זוגי. התרגיל השלישי גם דורש איזשהו מעבר על העץ בצורה דומה, רק שמקום סכימה הפונקציה שלך תחזיר אמת או שקר אם הX והY קיימים (כאן חשוב לדעת אם העץ הוא 'סתם' עץ בינארי או שהוא עץ חיפוש בינארי, שאז הצמתים שלך מסודרים בסדר מסויים. אם 'עץ חיפוש בינארי' לא אומר לך כלום אז כנראה שזה לא משנה). בהצלחה!
 
למעלה