שאלה קשה (C) - נשברתי

שאלה קשה (C) - נשברתי

שלום לכולם... לכאורה זו נראית שאלה פשוטה - לא יודע אולי פשוט לא בא לי בראש הכיוון הנכון.... השאלה: מקבלים שני עצים בינאריים וצריך לסרוק אותם בצורה יעילה ולהכניס למערך דינמי את כל האיברים הזהים.... כתבתי דבר כזה:
void CompTree(t_node *root1, t_node *root2, int *indx, char **res_arr) { if (root1==NULL || root2==NULL) return; else { CompTree(root1->left,root2,indx,res_arr); CompTree(root1->right,root2,indx,res_arr); CompTree(root1,root2->left,indx,res_arr); CompTree(root1,root2->right,indx,res_arr); if (root1->value==root2->value) { (*res_arr) = (char *) realloc ((*res_arr),(sizeof(int) * (*indx))); (*res_arr)[*indx-1]=root1->value; (*indx) = (*indx)+1; return; } } return; } אשמח לקבל רעיונות כיוון או כל רמז אחר... תודה מראש​
 
לא הסברתי

ממה אני לא מרוצה בתוכנית שלי... קודם כל כמות ההשוואות גודלה מידי (13 השוואות לשני עצים בעלי 3 עלים). יש השוואות שחוזרות פעמיים ואז במידה והעלים היו שווים יש כניסה כפולה במערך (אפשר לעקוף את זה ע"י בדיקה האם הערך כבר קיים במערך - אבל זה מכוער...) ושוב אודה על כל רעיון....
 

hope2drive

New member
בהחלט אפשר לשפר

יש באמת המון השוואות מיותרות. רמז: תוכל לחסוך הרבה מהן אם דבר ראשון תשווה בין 2 השורשים, ולפי זה תחליט אילו השוואות באמת נחוצות.
 

vinney

Well-known member
זה באמת מסורבל

למה שלא תשטיח את העצים? תקבל שני מערכים שתוכל לרוץ עליהם בזמן לינארי.
 
למעלה