בקשה עצים בינריים במבני נתונים

sac

משתמש חדש
יש לי כל מיני שאלות על העצים בינריים ואני לא כ'כ מצילחה לפתור אותם
 

sac

משתמש חדש
למשהי יש פוקציה בג'אוה שבונה עץ בינרי?
 

שלמה וייס

משתמש סופר מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
מוזיקה ונגינה

sac

משתמש חדש
לדוגמא: כתבי פונקציה המקבלת עץ בינארי של מספרים שלמים ומספר שלם x ומחזירה true אם יש בעץ מסלול מהשורש עד אחד העלים שלאורך כל המסלול ערך הצמתים הוא x ו false אם לא.
איך אני יודעת איך להסתכל על כזה תרגיל?
 

שלמה וייס

משתמש סופר מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
מוזיקה ונגינה
דווקא בג'אווה?
בעיקרון זה נשמע רקורסיה
מתחילים מהשורש, ושולחים את שני העלים לפונקציה.
בתכנית שכתבתי הנחתי שהעץ מורכב מצמתים שלהם יש את הערך value left right.
Java:
public class Main
{
    public static boolean isSame(Node x, double i)
    {
        if (x == null)
           {
                return true;
           }
        if (x.value != i)
            {
                return false;
            }
        return (isSame(x.left, i) || isSame(x.right, i))  
               
           
    }
    public static void main(String[] args) {
        System.out.println(isSame(root, someNumber));
    }
}
 
נערך לאחרונה ב:

sac

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

שלמה וייס

משתמש סופר מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
מוזיקה ונגינה
קצת הסבר:
מתחילים מהשורש (במיין), ובודקים התאמה למספר הנתון.
אם אין התאמה, מחזירים false.
אם יש התאמה, בודקים האם לפחות אחד מהילדים יחזיר true.
החזרת true קוראת שמגיעים לצומת null - סוף הענף.
 

sac

משתמש חדש
יש לי שאלה עוד יותר פשוטה :כתוב פעולה הקבלת עץ בינארי המכיל מספרים שלמים ,ומדפיסה לפי סדר סופי את כל המספרים השליליים.איך אני מתחילה להסתכל ולחשוב איך פותרים כאלה שאלות?
 

שלמה וייס

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

שלמה וייס

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

#1

משתמש רשום
את תצטרכי רקורסיה שבודקת - אם השורש שקיבלה שווה NULL - מפסיקה - RETURN
ואז קוראת לעצמה עם הילד השמאלי,
קוראת לעצמה עם הילד הימני
בודקת אם השורש שקיבלה שלילי ומדפיסה אותו
כך תהיה לך הדפסה בסדר סופי (שמאל, ימין שורש)
אם את צריכה הסבר נוסף תעדכני:)
 

sac

משתמש חדש
public static void tree(BinNode<Integer> t)
{
if(t==null)
return;
tree1(t.getLeft());
tree1(t.getRight());
if(t.getVal()<0)
System.out.println(t.getVal());
}זה קוד תקין?
 

sac

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

שלמה וייס

משתמש סופר מקצוען
מנוי פרימיום
בוגר/תלמיד פרוג
מוזיקה ונגינה
1698597157559.png

תעלו בתוך לשונית של קוד
 

#1

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

sac

משתמש חדש
נכון , את לא קוראת לכלום אבל שימי לב שההדפסה של הבן השמאלי תהיה לפני הקריאה לרקורסיה
את קודם תבדקי האם יש ערך בבן השמאלי ותדפיסי אותו
ואז תפעילי את הפונקציה דרך הבן השמאלי והבן הימני
public<T> void printLeft()
{
if(val==null)
return;
if(left==null)
return;
System.out.println(left.val);
printLeft();
} מה הבעיה בזה?
 

#1

משתמש רשום
בסוף את לא צריכה לקרוא לprintLeft();
אלא לleft.printLeft();
right.printLeft();
אחרת את קוראת שוב ושוב לפונקציה עם השורש
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קלז

א עַל נַהֲרוֹת בָּבֶל שָׁם יָשַׁבְנוּ גַּם בָּכִינוּ בְּזָכְרֵנוּ אֶת צִיּוֹן:ב עַל עֲרָבִים בְּתוֹכָהּ תָּלִינוּ כִּנֹּרוֹתֵינוּ:ג כִּי שָׁם שְׁאֵלוּנוּ שׁוֹבֵינוּ דִּבְרֵי שִׁיר וְתוֹלָלֵינוּ שִׂמְחָה שִׁירוּ לָנוּ מִשִּׁיר צִיּוֹן:ד אֵיךְ נָשִׁיר אֶת שִׁיר יְהוָה עַל אַדְמַת נֵכָר:ה אִם אֶשְׁכָּחֵךְ יְרוּשָׁלִָם תִּשְׁכַּח יְמִינִי:ו תִּדְבַּק לְשׁוֹנִי לְחִכִּי אִם לֹא אֶזְכְּרֵכִי אִם לֹא אַעֲלֶה אֶת יְרוּשָׁלִַם עַל רֹאשׁ שִׂמְחָתִי:ז זְכֹר יְהוָה לִבְנֵי אֱדוֹם אֵת יוֹם יְרוּשָׁלִָם הָאֹמְרִים עָרוּ עָרוּ עַד הַיְסוֹד בָּהּ:ח בַּת בָּבֶל הַשְּׁדוּדָה אַשְׁרֵי שֶׁיְשַׁלֶּם לָךְ אֶת גְּמוּלֵךְ שֶׁגָּמַלְתְּ לָנוּ:ט אַשְׁרֵי שֶׁיֹּאחֵז וְנִפֵּץ אֶת עֹלָלַיִךְ אֶל הַסָּלַע:
נקרא  17  פעמים

לוח מודעות

למעלה