ABA


"שאלה בעצים בינארים"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10577 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10577
eminem
חבר מתאריך 14.11.03
4348 הודעות, 1 פידבק
   14:38   20.01.12   
אל הפורום  
  שאלה בעצים בינארים  
 
   יש לי את השאלה הבאה

וככה מימשתי אותה עם שתי פונקציות עזר


רציתי לדעת אם אולי מישהו רואה דרך לממש את הפונקציה בלי שימוש בפונקציות עזר שסופרות לי בנפרד את הבנים? כלומר איכשהו לאחד בצורה אלגנטית את הכל בפונקציה אחת


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אתה יכול לעשות משהו כזה Net_Boy  20.01.12 16:53 1
     הבעיה היא שהחתימה של הפונקציה getBeauty קבועה eminem 20.01.12 17:11 2
         אז אני לא רואה דרך אחרת לעשות את זה מבלי פונקציות עזר. Net_Boy  20.01.12 17:13 3
             אוקיי... תודה eminem 20.01.12 17:30 4
  אני כמעט משוכנע שזה יעבוד TheKid 20.01.12 18:06 5

       
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   16:53   20.01.12   
אל הפורום  
  1. אתה יכול לעשות משהו כזה  
בתגובה להודעה מספר 0
 
  

double getBeauty(tNode *T, int& leftCount, int& rightCount)
{
if(!tNode)
return 1.0;

if(root->left){
++leftCount;
getBeauty(root->left, leftCount, rightCount);
}

if(root->right){
++rightCount;
getBeauty(root->right, leftCount, rightCount);
}

return 1.0 / (abs(leftCount-rightCount) +1);
}

כתבתי את זה די מהר אז יכולות להיות פה טעויות אבל אני חושב שהרעיון די ברור.
אתה כמובן קורא לפונקציה עם ערך של 0,0 ב leftCount ו rightCount

אם אתה צריך את זה בשפת C אז תשנה את הרפרנס לפוינטר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
eminem
חבר מתאריך 14.11.03
4348 הודעות, 1 פידבק
   17:11   20.01.12   
אל הפורום  
  2. הבעיה היא שהחתימה של הפונקציה getBeauty קבועה  
בתגובה להודעה מספר 1
 
   אסור לי לשנות אותה והיא חייבת להישאר כמו שרשמתי בתרגיל

כלומר מקבלת רק מצביע לצומת בעץ בינארי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   17:13   20.01.12   
אל הפורום  
  3. אז אני לא רואה דרך אחרת לעשות את זה מבלי פונקציות עזר.  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
eminem
חבר מתאריך 14.11.03
4348 הודעות, 1 פידבק
   17:30   20.01.12   
אל הפורום  
  4. אוקיי... תודה  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheKid לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.10.07
17978 הודעות, 1 פידבק
   18:06   20.01.12   
אל הפורום  
  5. אני כמעט משוכנע שזה יעבוד  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 20.01.12 בשעה 18:15 בברכה, TheKid
 
הרציונל שעומד מאחורי זה
הוא שבסופו של דבר אתה מקבל ברקורסיה בכל שלב את מספר הצמתי בימין פחות מספר הצמתים בשמאל (או להפך) ועוד אחד כלומר השורש שממנו אתה מוציא...
כלומר
אם תפעיל את הפונקציה על צד שמאל של השורש
תעשה אחד חלקי התוצאה תקבל בדיוק כמה בנים ימניים פחות בנים שמאליים יש לצד שמאל
אותו דבר על צד ימין...
לכל אחד מהם אתה מוסיף אחד
ותקבל את התוצאה...



double getBeauty(tNode *T)
{
if (T==NULL) return 0;
return 1/(abs(1/getBeauty(T->left)-1/getBeauty(T->right))+1)
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net