עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

פורסם
  • מחבר

המחשב לא מוכן לקבל את הפקודה

 current->left=current->right;

(ניסתי לעשות את temp מסוג מצביע, וגם זה לא עובד! )

  • תגובות 35
  • צפיות 4k
  • נוצר
  • תגובה אחרונה
פורסם

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

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


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.

פורסם
  • מחבר

ו-לא. הוא לא נותן לי להציב בtemp את ההודעה הנ"ל הוא נותן על השורה הזו: temp=current->left;

פורסם

ניסית לשלוח לו את הצומת ממנה את רוצה להחליף?(בדרך כלל השורש).

כנראה את שולחת NULL, ולא את הצומת.

פורסם

את יכולה להראות את הקריאה (החיצונית) לפונקציה?

פורסם
  • מחבר

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

פורסם

את הקריאות לבנים את צריכה לעשות רק אם הנוכחי הוא לא NULL.

אם current הוא NULL, את לא יכולה לגשת ל- current->right ו- current->left.

פורסם
  • מחבר

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

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

תודה. :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);
}
}
}

פורסם

תנסי:

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

פורסם
  • מחבר

תודה אבל לא. זה מחליף רק פעם אחת בין הבנים, ולא קורא שוב לפונקציה ברקורסיה.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.