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

  • הוסף לסימניות
  • #1
יש לי כל מיני שאלות על העצים בינריים ואני לא כ'כ מצילחה לפתור אותם
 
  • הוסף לסימניות
  • #2
למשהי יש פוקציה בג'אוה שבונה עץ בינרי?
 
  • הוסף לסימניות
  • #3
  • הוסף לסימניות
  • #4
לדוגמא: כתבי פונקציה המקבלת עץ בינארי של מספרים שלמים ומספר שלם x ומחזירה true אם יש בעץ מסלול מהשורש עד אחד העלים שלאורך כל המסלול ערך הצמתים הוא x ו false אם לא.
איך אני יודעת איך להסתכל על כזה תרגיל?
 
  • הוסף לסימניות
  • #5
דווקא בג'אווה?
בעיקרון זה נשמע רקורסיה
מתחילים מהשורש, ושולחים את שני העלים לפונקציה.
בתכנית שכתבתי הנחתי שהעץ מורכב מצמתים שלהם יש את הערך 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));
    }
}
 
נערך לאחרונה ב:
  • הוסף לסימניות
  • #6
אני יודעת שזה רקורסיה ,הבעיה היא שעכשיו התחלנו את הנושא ואני עדיין לא מספיק יודעת איך עובדים עם הרקורסיה ,אני צריכה הכוונה
 
  • הוסף לסימניות
  • #7
קצת הסבר:
מתחילים מהשורש (במיין), ובודקים התאמה למספר הנתון.
אם אין התאמה, מחזירים false.
אם יש התאמה, בודקים האם לפחות אחד מהילדים יחזיר true.
החזרת true קוראת שמגיעים לצומת null - סוף הענף.
 
  • הוסף לסימניות
  • #8
יש לי שאלה עוד יותר פשוטה :כתוב פעולה הקבלת עץ בינארי המכיל מספרים שלמים ,ומדפיסה לפי סדר סופי את כל המספרים השליליים.איך אני מתחילה להסתכל ולחשוב איך פותרים כאלה שאלות?
 
  • הוסף לסימניות
  • #9
יש לי שאלה עוד יותר פשוטה :כתוב פעולה הקבלת עץ בינארי המכיל מספרים שלמים ,ומדפיסה לפי סדר סופי את כל המספרים השליליים.איך אני מתחילה להסתכל ולחשוב איך פותרים כאלה שאלות?
עץ בינארי או עץ חיפוש בינארי?
 
  • הוסף לסימניות
  • #11
מוזר, סריקה בסדר סופי זה בעץ חיפוש בינארי.
בעץ בינארי רגיל אין משמעות לסדר האיברים.
אולי אצלכם ככה קוראים לעץ חיפוש בינארי, ואם כן פשוט להוסיף תנאי עצירה ברקורסיה במידה והערך הוא חיובי
 
  • הוסף לסימניות
  • #12
את תצטרכי רקורסיה שבודקת - אם השורש שקיבלה שווה NULL - מפסיקה - RETURN
ואז קוראת לעצמה עם הילד השמאלי,
קוראת לעצמה עם הילד הימני
בודקת אם השורש שקיבלה שלילי ומדפיסה אותו
כך תהיה לך הדפסה בסדר סופי (שמאל, ימין שורש)
אם את צריכה הסבר נוסף תעדכני:)
 
  • הוסף לסימניות
  • #13
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());
}זה קוד תקין?
 
  • הוסף לסימניות
  • #15
תודה רבה ,ועכשיו אם מבקשים ממני לכתוב פונקציה בתוך המחלקה של העץ שמדפיסה את כל הבנים השמאליים איך אני עושה את זה? אם זה בתוך המחלקה אני לא צריכה לקבל כלום?
 
  • הוסף לסימניות
  • #16
1698597157559.png

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

פרוגבוט

תוכן שיווקי
פרסומת

אשכולות דומים

0 תגובות

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

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


תהילים פרק כה

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