פורסם 2006 ביוני 2019 שנים מחבר המחשב לא מוכן לקבל את הפקודה current->left=current->right;(ניסתי לעשות את temp מסוג מצביע, וגם זה לא עובד! )
פורסם 2006 ביוני 2019 שנים מה השגיאה שאתה מקבלת?ניסית לרשום כך(?):template <class T>void Tree<T>::reflect(Node<T> *current){ if(current) { Node<T> *temp; temp=current->left; current->left=current->right; current->right=temp; reflect(current->left); reflect(current->right); }}את ההשמה של השמאלי בTEMP הוא נותן לך?
פורסם 2006 ביוני 2019 שנים מחבר עברתי על התכנית שלך!, המחשב אפילו לא נכנס ל if.אז עשיתי כזה דבר:template <class T>void Tree<T>::reflect(Node<T> *current){ if(current) { Node<T> *temp; temp=current->left; current->left=current->right; current->right=temp; } reflect(current->left); reflect(current->right);}וזו השגיאה שהוא נותן:An unhandled exception of type 'System.NullReferenceException' occurred in NAAMA.exeAdditional information: Object reference not set to an instance of an object.
פורסם 2006 ביוני 2019 שנים מחבר ו-לא. הוא לא נותן לי להציב בtemp את ההודעה הנ"ל הוא נותן על השורה הזו: temp=current->left;
פורסם 2006 ביוני 2019 שנים ניסית לשלוח לו את הצומת ממנה את רוצה להחליף?(בדרך כלל השורש).כנראה את שולחת NULL, ולא את הצומת.
פורסם 2006 ביוני 2019 שנים מחבר איך קוראים שוב לפונקציה, ושלחים אליה את הצומת ולא את NULL???הקריאה לפונקציה: t.reflect();זו המחלקה Tree:template <class T>class Tree{protected: Node<T> * root; public: Tree(); ~Tree(); int IsEmpty() const; void Clear() { Clear(root); root=NULL;} void PreOrder() { PreOrder(root); } void InOrder() { InOrder(root); } void PostOrder() { PostOrder(root); } virtual void Process(T val) {cout<<val<<" ";} int leaves(){ return leaves(root); }//פונקציה המחזירה את מספר העלים בעץ int height(){ return height(root); }//פונקציה המחזירה את גובה העץ void reflect(){ reflect(root); }//פונקציה המחליפה בין בנים של כל קוקוד בעץprivate: void Clear(Node<T>*current); void PreOrder(Node<T>*current); void InOrder(Node<T>*current); void PostOrder(Node<T>*current); int leaves(Node<T>*current); int height(Node<T>*current); void reflect(Node<T>*current);};
פורסם 2006 ביוני 2119 שנים את הקריאות לבנים את צריכה לעשות רק אם הנוכחי הוא לא NULL.אם current הוא NULL, את לא יכולה לגשת ל- current->right ו- current->left.
פורסם 2006 ביוני 2119 שנים מחבר לאור עצותיכם המרובות, זה מה שכתבתי: מישו יכול להגיד לי אם זה נכון????? תודה. void Tree<T>::reflect(Node<T>*current){ if(current) { Node<T>*temp; temp=current->left; current->left=current->right; current->right=temp; } if(current) { reflect(current->left); reflect(current->right); }}
פורסם 2006 ביוני 2119 שנים זה טוב. עכשיו שימי לב: התנאי הראשון והשני בודקים בעצם אותו דבר. לכן, את יכולה לאחד אותם.
פורסם 2006 ביוני 2119 שנים מחבר כן. התנאי הכפול זה בטעות.אבל-פתאום גיילתי שאני צריכה להחליף בין ערכי הבנים!!!!!!!!! ולא בין הבנים עצמם(אני החלפתי בין תת עץ ימני לשמאלי וכו')יש פתרון??????????????????????????? :'(
פורסם 2006 ביוני 2119 שנים מחבר אם זה רק בן אחד- אז לא.אבל- איך עושים קראיה רקורסיבית (אני מצליחה להחליף רק בין זוג הבנים הראשון ואז הפונקציה נגמרת לי.)זה מה שכתבתי:emplate <class T>void Tree<T>::reflect(Node<T>*current){ if((current->left==NULL)||(current->right==NULL)) {} else { T temp; temp=current->left->value; current->left->value=current->right->value; current->right->value=temp; if((current->left->left!=NULL)&&(current->left->right!=NULL)) { reflect(current->left); } if((current->right->right!=NULL)&&(current->right->right!=NULL)) { reflect(current->right); } }}
פורסם 2006 ביוני 2219 שנים תנסי:template <class T>void Tree<T>::reflect(Node<T>*current){ if(current) { if(current->right && current->left) { T temp; temp=current->left->value; current->left->value=current->right->value; current->right->value=temp; } reflect(current->left); reflect(current->right); }}
פורסם 2006 ביוני 2219 שנים מחבר תודה אבל לא. זה מחליף רק פעם אחת בין הבנים, ולא קורא שוב לפונקציה ברקורסיה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.