מצטער על המקפים - זה רק בשביל שרוטר לא יבטל את הרווחים...
בכל אופן, אתה רואה את הבעייתיות... יש לך התנגשויות... איפה שיש Xאיך תפתור? תכפיל (+1) את הגובה = מס' הסלאשים.
כלומר, הרמה הנמוכה ביותר בעץ (הכי רחוקה מהשורש) תקבל גובה 1, ואז כל רמה מעליה מוכפלת ב-2(ועוד 1). כלומר:
--------------8-------------- -------------/-\------------- ------------/---\------------ -----------/-----\----------- ----------/-------\---------- ---------/---------\--------- --------/-----------\-------- -------/-------------\------- ------4---------------c------ -----/-\-------------/-\----- ----/---\-----------/---\---- ---/-----\---------/-----\--- --3-------6-------a-------e-- -/-\-----/-\-----/-\-----/-\- 1---2---5---7---9---b---d---f
|
בגדול, הנוסחא למס' הסלאשים של קודקוד ברמה ה-n, כאשר 0 הוא העלה הנמוך ביותר וממנו מתחילים את ספירת הרמות, היא:
f(n) = 2f(n-1) + 1
וזה ייצור לך עץ שברמה התחתונה יש בדיוק 3 רווחים בין 2 איברים.
הבעיה מתחילה כאשר יש לך מספרים דו-ספרתיים (ויותר), וזה קצת יותר מסובך, אם כי בהנחה שלא יהיה יותר מדו-ספרתי, אפשר פשוט לוותר על רווחים(מקפים) ולכתוב במקומם את האיבר.ובכן, איך הייתי יוצר הדפסה כזאת?
1- חשב את גובה העץ. (ע"י BFS למשל)
2- חשב את גודל המטריצה של התווים, כלומר:
-2.1 עבור עץ בגובה n, נחשב: sum_i<-1_to_n(f(i)) + n + 1
---- זה הגובה, והרוחב זה פעמיים הגובה מינוס אחד: width = 2*height - 1
3- תמלא את המטריצה בתווים = סלאשים, רווחים, ותוכן מספרי
4- הדפס את המטריצה בלולאה
כלומר, פירקתי את ההדפסה מהבנייה. בהתחלה יצרתי מטריצה, ואח"כ הדפסתי אותה כשהייתה מוכנה.
יש פה הרבה עבודה שחורה, אבל לא נורא.
שיהיה בהצלחה!