עבור לתוכן

++C רקורסיה

Featured Replies

פורסם

יש לי עץ בינארי <לכל קודקוד יש שני בנים, תמיד האב גדול משני בניו>

אני צריכה לכל בן ימני ליצור קוד עם המסלול איך הגעתי אליו מהשורש <אם הלכתי ימינה נוסיף 1 ואם שמאלה נוסיף 2> לכן לכל קודקוד יש שדה מסוג CHAR* <הגדרתי לו גודל מקסימום 8> שאליו נשרשר את המסלול אבל זה לא עובד!

זו הפונקציה שכתבתי:


void H::kidud(tav* temp)
{
if (temp)
{
if(temp->incidence!=root->incidence)
{
if(temp->right!=NULL)
{
strcat(temp->right->kod,temp->kod);
}
if(temp->left!=NULL)
{
strcat(temp->left->kod,temp->kod);
}
}
if(temp->value!=0)
{
cout<<endl<<temp->value<<": "<<temp->kod;
}

kidud(temp->left);
kidud(temp->right);
}
}

כל פעם בשורה STRCAT הוא משרשר גם אל עצמו במקום לשרשר רק לבן הימני הוא משרשר גם לשמאלי ומסתבך

פורסם

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

בינתיים אין מה לאמר בנושא..

פורסם

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

נראה לי שהבעיה היא שאת משנה את הקוד של הקודקוד גם אם הוא בן ימני וגם אם הוא שמאלי.

במקום זה, את יכולה להעביר פרמטר שמכיל את הקידוד של האבא.

פורסם
  • מחבר

נראה לי שהבעיה היא שאת משנה את הקוד של הקודקוד גם אם הוא בן ימני וגם אם הוא שמאלי.

במקום זה, את יכולה להעביר פרמטר שמכיל את הקידוד של האבא.

זו בדיוק הבעיה.

איך אני מתגברת עליה?

למה כשאני עושה:

 
strcat(temp->right->kod,temp->kod);

הוא משנה לי גם את הקודקוד אבא (temp->kod)?

פורסם

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

(ולא, strcat משנה רק את ה- string הראשון)

פורסם
  • מחבר

אז במקום לעשות STRCAT כל פעם הצהרתי על גודל TEMP->KOD+1 וזה עבד.

למה?

פורסם

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

נראה לי שהבעיה היא שאת משנה את הקוד של הקודקוד גם אם הוא בן ימני וגם אם הוא שמאלי.

במקום זה, את יכולה להעביר פרמטר שמכיל את הקידוד של האבא.

תהנה :) אני לא כאן בשביל לפתור חידות היגיון. אם רוצים עזרה, שיתנו את כל הפרטים.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים