עבור לתוכן

איך יוצרים עץ בינארי ב c

Featured Replies

פורסם

יש לי את המבנה הזה


typedef struct node {
int data;
node*left,*right
}Tree;

אני צריך לעשות פונקציה שיוצרת עץ ופונקציה שמוסיפה מספר לעץ
איך אני עושה את זה?
תודה

פורסם

בוא נתחיל לאט. נניח שכרגע יש עץ ריק. מה אתה עושה? איך אתה מוסיף את הראשון?

פורסם

בוא נתחיל עוד יותר לאט. ההגדרה של המבנה הזה לא תקנית. בC זה לא יתקמפל כי אין כזה דבר node - יש רק struct node. ב++C זה יתקמפל, אבל אין שום סיבה לtypedef במקרה זה.

פורסם
  • מחבר

אני יודע שצריך לכתוב struct זה לא הבעיה.

אני צריך לפני פונקציית הוספה לכתוב פונקציה שיוצרת עץ.

עשיתי את הפונקציה הזו


Tree* create(){

Tree* new=(Tree*)malloc(sizeof(Tree))
return new;
}
איך אני עושה את הפונקציית הוספה?

פורסם

לא מוגדר איזה סוג של עץ בינארי זה . אפשר להוסיף nodes באופן שרירותי. השאלה למה מנסים להגיע. אם רוצים להגיע לפיזור מקסימאלי אני חושב חושב שbredth first search זאת הדרך. בשביל binary search tree יש חוקים מאוד ברורים. יש גם עצים יותר מסובכים שהם בינארים כמו red black tree .

החלק של ההוספה זה לרוב החלק הקל. מחיקה זה יותר קשה. טיפול בעץ דומה לlinked list שזה בעצם עץ עם ענף אחד (unary tree ). עדיין זה לא מבנה נתונים מסובך אבל "עץ" זה מבנה נתונים די נפוץ.

יש סיכוי שפתרתי את הבעיה אבל לא כתבתי פה שום קוד. בקוד צריך לשים לב לpointers והקצאות דינאמיות בכדי לא ליפול ;) .

פורסם

כל NODE שאתה מוסיף אתה מקצה לו זיכרון. השאלה היא לאן אתה רוצה להוסיף NODE? הראשון יהיה השורש כמובן. אח"כ לאן הולך השני?

פורסם

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

פורסם

נכון ובשביל זה הצעתי לו לחשוב על הוספת צומת לעץ. לאן הוא מוסיף אותו?

ארכיון

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

דיונים חדשים