עץ בינארי...

yair24

Member
עץ בינארי...

שלום, יש פוינטר לשורש של עץ בינארי שבכל צומת יש לו מבנה נתונים מסוים שבין היתר יש בו תו מסוג CHAR. אני רוצה לכתוב פונקציה שמקבלת צומת של העץ ותו מסוים בתור פרמטרים, מתחילה לרוץ על העץ ומחפשת בעלים (הצמתים האחרונים) שלו את האות שקיבלתי כפרמטר... ואז היא מחזירה את הצומת שבה האות שווה לCHAR. מצורף פה קובץ של הפונקציה (רקורסיבית) יש שם טעות, שאני יודע מהי אבל אני לא מצליח לחשוב איך לפתור את הבעיה הזאת. מי יכול לעזור? יאיר
 

yair24

Member
לא העליתי קובץ טוב...

בקיצור יש לי מבנה נתונים שמכיל ככה:
class letter { char let; lettr *left, *right; public: GetChar{return let;} }​
במבנה יש שני פוינטרים של בן ימני ובן שמאלי איתם נבנה לו עץ בינארי. ידוע לי שבכל צומת של העץ יש אות שונה. ואני רוצה לכתוב פונקציה שמקבלת פוינטר לצומת העץ (בפעם הראשונה נקרא לה עם שורש העץ) ומקבלת אות. הנה כך:
letter* GetNodeWithSameLetter(letter * node, char ch)​
ומחזירה את הצומת בעץ שיש בה את האות שביקשתי זה הכל... הפונקציה שבקובץ שמצורף בהודעה למעלה מנסה לבצע את זה בצורה פתטית למדי יש למישהו פתרון? תודה יאיר
 

תמר,

New member
ניסיון

נסה את הפונקציה הזאת: (אני מקווה שאין שגיאות. עבר זמן מאז כתבתי תוכנית ב-c)
letter* GetNodeWithSameLetter(letter * node, char ch) { letter* p=NULL; if (node->GetChar() == ch) return node; if (node->left) p = GetNodeWithSameLetter(node->left, ch); if (!p && node->right) p = GetNodeWithSameLetter(node->right, ch); return p; }​
נראה לי שאפשר להכניס את הפונקציה הזאת (עם השינויים הדרושים) בתוך ה-class.
 

yair24

Member
תודה...

את צודקת בסוף מצאתי פתרון שהוא קצת יותר מסורבל מזה אני אנסה להשתמש במה שכתבת כי זה יותר יעיל ממה שאני עשיתי. תודה יאיר
 
למעלה