++C עצים בינארים - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

++C עצים בינארים


נעמה.

Recommended Posts

  • תגובות 35
  • נוצר
  • תגובה אחרונה

מה השגיאה שאתה מקבלת?

ניסית לרשום כך(?):


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 הוא נותן לך?

קישור לתוכן
שתף באתרים אחרים

עברתי על התכנית שלך!, המחשב אפילו לא נכנס ל 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.exe

Additional information: Object reference not set to an instance of an object.

קישור לתוכן
שתף באתרים אחרים

איך קוראים שוב לפונקציה, ושלחים אליה את הצומת ולא את 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);
};

קישור לתוכן
שתף באתרים אחרים

לאור עצותיכם המרובות, זה מה שכתבתי:

מישו יכול להגיד לי אם זה נכון?????

תודה. :hi:


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);
}
}

קישור לתוכן
שתף באתרים אחרים

כן. התנאי הכפול זה בטעות.

אבל-

פתאום גיילתי שאני צריכה להחליף בין ערכי הבנים!!!!!!!!!

ולא בין הבנים עצמם(אני החלפתי בין תת עץ ימני לשמאלי וכו')

יש פתרון??????????????????????????? :'(

קישור לתוכן
שתף באתרים אחרים

אם זה רק בן אחד- אז לא.

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

זה מה שכתבתי:


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);
}
}
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

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


×
  • צור חדש...