שעור ראשון: מבוא לתכנות מונחה העצמים

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

מבוא לתכנות ב- JAVA תרגול 7

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

מבוא למדעי המחשב - חובלים

תוכן העניינים

תוכן העניינים

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

תרגול 1

מבוא למדעי המחשב - חובלים

Microsoft Word - c_SimA_MoedB2005.doc

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

שאלהIgal : מערכים דו מימדיים רקורסיה:

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

מהוא לתכנות ב- JAVA מעבדה 3

מבוא למדעי המחשב

שאלהIgal : מערכים דו מימדיים רקורסיה:

מבוא לתכנות ב- JAVA תרגול 11

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

הגשה תוך שבוע בשעת התרגול

שאלהIgal : מערכים דו מימדיים רקורסיה:

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

תרגול 1

מבוא למדעי המחשב

PowerPoint Presentation

סדנת תכנות ב C/C++

הגשה תוך שבוע בשעת התרגול

Microsoft Word - SDAROT 806 PITRONOT.doc

Slide 1

Tutorial 11

Microsoft Word B

הטכניון מכון טכנולוגי לישראל אלגוריתמים 1 )443432( סמסטר חורף הפקולטה למדעי המחשב תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגור

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

Slide 1

מבוא למדעי המחשב

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

PowerPoint Presentation

שיעור 1

מתכונת עיצוב 3013

Slide 1

מבוא למדעי המחשב

Slide 1

PowerPoint Presentation

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

מבוא למדעי המחשב

שקופית 1

אוניברסיטת תל אביב - בית הספר למדעי המחשב מבוא מורחב למדעי המחשב, אביב 2019 תרגיל בית מספר - 2 להגשה עד 02/04/2019 בשעה 23:55 קיראו בעיון את הנחיות הע

PRESENTATION NAME

מקביליות

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

234114

Microsoft Word - c_SimA_MoedA2006.doc

מקביליות

פתרון וחקירת מערכות של משוואות לינאריות שאלות: 1( מצא אילו מהמערכות הבאות הן מערכות שקולות: 2x+ y= 4 x+ y= 3 x y = 0 2x+ y = 3 x+ 10y= 11 א. 2x 2y= 0

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

ðñôç 005 î

Microsoft Word - pitaron222Java_2007.doc

מבוא למדעי המחשב

Microsoft PowerPoint - rec3.ppt

Microsoft PowerPoint - lec10.ppt

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

PowerPoint Presentation

Slide 1

PowerPoint Presentation

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

<4D F736F F D20FAF8E2E5EC20E0ECE2E1F8E420EEF2E5F8E D F9E0ECE5FA2E646F63>

איטרטורים: 1 תוכנה 1 סתיו תשע"ג תרגיל מספר 9 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה moodl

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

Programming

PowerPoint Presentation

תכנון אלגוריתמים, אביב 1021, תרגול מס' 4 תכנון דינאמי תכנון דינאמי בתרגול זה נדון בבעיית הכפלת סדרת מטריצות (16.1.(CLR ראשית נראה דוגמא: דוגמא: תהינה

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

מבוא למדעי המחשב

סט נובמבר 08 מועד מיוחד - פתרונות עפר.doc

Slide 1

סדרה חשבונית והנדסית

Slide 1

<4D F736F F D20EEF9E5E5E0E5FA20E3E9F4F8F0F6E9E0ECE9E5FA2E646F63>

תוכנה 1 אביב תשע"ח תרגיל מספר 8 אוספים גנריים ו- framework collection הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת ה

Slide 1

מצגת של PowerPoint

Microsoft Word - hedva 806-pitronot-2011.doc

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

דף נגזרות ואינטגרלים לשאלון 608 כללים למציאת נגזרת של פונקציה: n 1. y' n x n, y הנגזרת x.1 נכפול בחזקה )נרשום אותה משמאל ל- (. x א. נחסר אחד מהחזקה. ב

Slide 1

Microsoft PowerPoint - rec8.ppt

ForMenahelHeshbonot

יצוא לחשבשבת תוכן עיניינים הגדרות - חשבונות בנק...2 הגדרות - הגדרות חשבשבת... 3 הגדרות - כרטיסי אשראי... 4 הגדרות - סוגי הכנסה... 5 יצוא לחשבשבת...6 י

Slide 1

אוניברסיטת בן-גוריון בנגבNEGEV BEN-GURION UNIVERSITY OF THE ת.ד.,653 באר-שבעISRAEL 10584P.O.B. 653, BEER SHEVA , המזכירות האקדמית המרכז ללימודים

תמליל:

פרק 10 עץ בינרי 1

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

מה בשיעור עץ כללי מושגים עץ בינרי חוליה בינרית עץ חוליות בינרי עץ חוליות בינרי כמבנה רקורסיבי פעולות על עצי חוליות בינריים עץ-חיפוש-בינרי.1.2.3.4.5.6.7.8 3

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

דוגמה לעץ-משפחה ניתן לתאר את קשרי המשפחה באמצעות אילן יוחסין: אברהם ישמעאל יצחק... עוד 6 בנים נביות קדר קדמה יעקב עשו... עוד 9 בנים ראובן בנימין דינה... עוד 9 בנים 5

דוגמה נוספת לעץ - מערכת קבצים 6

עצים: מושגים 7 שורש העץ-הצומת העליון בעץ הצומת A צומת-כל איבר בעץ הוא צומת בן ימני ובן שמאלי-הצמתים B הוא שמאלי של A הורה-לדוגמה D הוא אבא של F אחים-הם שני צמתים ששניהם בנים לאותו אבא צאצא-לדוגמה F הוא צאצא של C,וכל איברי העץ הם צאצאים של שורש העץ A הורה קדמון- C הוא הורה-קדמון של F אך גם של D ו- E שורש העץ A הוא אב-קדמון של כל שאר הצמתים עלה-הוא צומת ששני תת-עציו הם עצים ריקים לדוגמה הצמתים E ו- F תת-עץ-ימני של צומת-הצמתים C,D,E,F מהווים תת-עץ ימני של A תת-עץ-שמאלי של צומת-הצמתים,F D מהווים את תת-העץ השמאלי של C

עצים: מושגים המשך רמה של צומת-היא מספר הקטעים במסלול בין שורש העץ לצומת הרמה של השורש היא 0 רמתו של 3 F רמה בעץ-היא קבוצת כל הצמתים בעץ,שרמתם שווה למשל רמה 2 מכילה הצמתים D,E רמה מלאה-רמה בעץ שקיימים בה כל הצמתים למשל רמה 1 היא מלאה עץ-שלם-עץ שכל רמותיו מלאות עץ מלא-עץ שאין בו בנים יחידיים 8

מגבלות המגדירות מבנה של עץ קיים צומת אחד בדיוק ללא הורה; צומת זה קרוי שורש העץ. לכל צומת שאינו השורש יש הורה יחיד. כל צומת הוא צאצא של השורש. 9

עץ בינרי Tree( )Binary עץ שבו לכל צומת יש לכל היותר שני ילדים נקרא עץ בינרי Tree( )Binary הילדים נקראים ילד שמאלי וילד ימני. הילד השמאלי הוא שורש של תת עץ שמאלי. הילד הימני הוא שורש של תת עץ ימני. 10

דוגמאות לעצים בינריים.א.ב.ג.ד.ה 11

דוגמאות לעצמים שאינם עצים בינריים עץ, אך לא בינרי לא עץ 12

חוליה בינרית BinTreeNode<T> לחוליה זו 3 תכונות: : הערך info - : הילד השמאלי left - : הילד הימני right - לכל אחת מהתכונות קיימות פעולות ו- Get. Set 13

ממשק החוליה בינרית 14

שאלה? ממשו את המחלקה BinTreeNode<T> 15

עץ חוליות בינרי 8 באמצעות החוליה הבינרית ניתן לבנות עץ חוליות בינרי: 3- null 20 null 8 null null 4 null 15 null null 7 null 16

בניית עץ חוליות בינרי BinTreeNode<int> bt1 = new BinTreeNode<int>(3); bt1.setleft (new BinTreeNode<int>(5)); bt1.setright (new BinTreeNode<int>(7)); bt1 BinTreeNode<int> left null info 3 right null BinTreeNode<int> BinTreeNode<int> left info right left info right null 5 null null 7 null 17

שאלה? עץ עלה הוא העץ הקטן ביותר שיכול להתקיים. פעמים רבות ניעזר בבדיקה האם עץ מסוים הוא עץ עלה. כתבו קטע קוד הבודק האם חוליה בינרית נתונה היא עץ עלה. public static bool IsLeaf(BinTreeNode<int> bt) { } return (bt.getleft()==null)&&(bt.getright()==null); 18

תנועה על עץ חוליות בינרי ושינויו int a = bt1.getleft().getinfo(); bt1.getleft().setinfo(7); bt1 BinTreeNode<int> a 5 left null info 3 right null BinTreeNode<int> BinTreeNode<int> left info right left info right null 57 null null 7 null 19

תנועה על עץ חוליות בינרי ושינויו BinTreeNode<int> temp = bt1.getleft(); bt1.setleft (bt1.getright()); bt1.setright (temp); bt1 BinTreeNode<Integer> left null info 3 right null temp BinTreeNode<Integer> BinTreeNode<Integer> left info right left info right null 5 null null 7 null 20

הכנסה BinTreeNode<int> node = new BinTreeNode<int>(15); BinTreeNode<int> pos = bt1.getright(); pos.setleft (node); הכנסה בקצה העץ: bt1 BinTreeNode<int> left info right pos 3 null BinTreeNode<int> left info right null 5 null BinTreeNode<int> left left info right null 7 null 21 node BinTreeNode<int> left info right null 15 null

הוצאה bt1 BinTreeNode<int> left info right 3 null הוצאת עץ עלה? הוצאת תת עץ במלואו? הוצאת צומת בודד? BinTreeNode<int> left info right null 5 null BinTreeNode<int> left left info right null 7 null למשל כיצד מוציאים את הצומת הזה? bt1.setright(null); 22

הוצאה bt1 BinTreeNode<int> left info right 3 null bt1.getright().setleft(null); BinTreeNode<int> left info right null 5 null BinTreeNode<int> left left info right null 7 null BinTreeNode<int> left info right null 15 null BinTreeNode<int> left info right null 7 null למשל כיצד מוציאים את הצומת הזה? 23

אי שמירה על מבנה העץ bt1 BinTreeNode<int> left info right 3 null קל מאוד להרוס את מבנה העץ ציירו את המבנה המתקבל לאחר ביצוע השורה: bt1.setleft (bt1.getright()); BinTreeNode<int> BinTreeNode<int> left left info right left info right null 5 null null 7 null BinTreeNode<int> BinTreeNode<int> left info right left info right null 15 null null 7 null ולאחר ביצוע השורה: bt1.setleft (bt1); 24

עץ חוליות בינרי מבנה רקורסיבי עץ חוליות בינרי הוא: או חוליה בינרית יחידה חוליה בינרית שבה לכל היותר שתי הפניות לעצי חוליות בינריים הזרים זה לזה )אין להם חוליות משותפות( 25

סריקות עומק של עץ בינרי קיימות 3 סריקות עומק של עץ: סריקה בסדר תחילי.)preorder traversal( סריקה בסדר ת וכי.)inorder traversal( סריקה בסדר סופי.)postorder traversal( 26

סריקה תחילי) preorder ) 27

Preorder Example a b d e g h i f c j a b d g h e i c f j 28

סריקה תוכית ( (inorder

Inorder Example a b d e g h i f c j g d h b e i a f j c 30

סריקה תוכית ( (postorder 31

Postorder Example a b d e g h i f c j g h d i e b j f c a 32

פעולה הבונה עץ פעולה בונה עץ// public static BinTreeNode<int> CreateTree() } Console.WriteLine("Enter Node"); int x = int.parse(console.readline()); int d; Console.WriteLine("Enter 0 To Leaf, Enter 1 To Left " + x + " Enter 2 To Right " + x + " Enter 3 Two Child"); { 33 d = int.parse(console.readline()); עלה // 0) == (d if // שני בנים return new BinTreeNode<int>(x); בן שמאלי יחיד/( 1 == (d else if return new BinTreeNode<int>(CreateTree(), x, null); בן יחיד ימני// 2) == (d else if return new BinTreeNode<int>(null, x, CreateTree()); else return new BinTreeNode<int>(CreateTree(), x, CreateTree());

פלט הפעולה Enter Node 8 Enter 0 To Leaf,Enter 1 To Left 8 Enter 2 To Right 8 Enter 3 Two Child 3 Enter Node 7 Enter 0 To Leaf,Enter 1 To Left 7 Enter 2 To Right 7 Enter 3 Two Child 1 Enter Node 4 Enter 0 To Leaf,Enter 1 To Left 4 Enter 2 To Right 4 Enter 3 Two Child 0 Enter Node 10 Enter 0 To Leaf,Enter 1 To Left 10 Enter 2 To Right 10 Enter 3 Two Child 0 34

יעילות הסריקות בשלושת האלגוריתמים הסריקה מבצעת ביקור יחיד בכל צומת של העץ. לכן זמן הריצה של כל אחת מהסריקות הוא לינארי בגודל העץ )שהוא מספר צמתיו(. סדר הגודל של היעילות הוא.O(n) 35

דוגמאות לסריקה 36

דוגמאות לסריקה המשך דוגמה 2 37

הדפסת כל העלים השמאליים 38

דוגמאות לסריקה 3 פתרון 39

הדפסת הצמתים ברמה מסויימת n 40

דוגמאות לסריקה 4 פתרון 41

דוגמה פתורה הכנסה,להכניס לכל בן יחיד אח זהה לו 42

פתרון 43

מחיקת כל העלים בעץ 44

פעולה המחוקת את כל העלים בעץ 45

הדפסת כל ההורים הגדולים מהבנים 46

פתרון הדפסת הצמתים הגדולים מהבנים 47

מספר הצמתים בעץ public static int NumNodes (BinTreeNode<int> bt) { כיוון שהפעולה רקורסיבית, ההפניה יכולה if (bt == null) להיות null בשלב כלשהו ברקורסיה return 0; return NumNodes(bt.GetLeft())+NumNodes(bt.GetRight())+1; } סופרים את הצמתים בתת עץ הימני סופרים את הצמתים בתת עץ השמאלי 48 מוסיפים 1 עבור השורש שגם הוא צומת

תבנית מנייה תבנית מנייה: תנאי עצירה הוא האם ההפניה היא null אז יוחזר 0 אם התנאי מתקיים אז נעשה 1 +קריאה רקורסיבת על תת-עץ-שמאל+קריאה רקורסיבית תת-עץ-ימני אם התנאי לא מתקיים נעשה קריאה רקורסיבת על תת-עץ-שמאל+קריאה רקורסיבית תת-עץ-ימני 49

דוגמאות מנייה //פעולה מחזירה מספר הצמתים הזוגיים בעץ // public static int NumEven(BinTreeNode<int> t) { if (t == null) return 0; else if (t.getinfo() % 2 == 0) return 1 + NumEven(t.GetLeft()) + NumEven(t.GetRight()); else return NumEven(t.GetLeft()) + NumEven(t.GetRight()); }

2.פעולה המחזירה מספר הבנים הימניים

3.פעולה המחזירה מספר הצמתים שיש להם 2 בנים שווים

4.פעולה מחזירה מספר הצמתים שערכם קטן מערכו של ההורה

5.מספר העלים בעץ 54

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

דוגמה פתורה 1

דוגמה פתורה 2 -סכום הסבא 57

דוגמה פתורה 2 -סכום הסבא 58

דוגמה פתורה 3 סכום צמתים ברמה 59

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

בדיקת קיום איבר בעץ public static bool Exists (BinTreeNode<int> bt, int x) { if (bt == null) תנאי העצירה return false; if (bt.getinfo() == x) return true; ברגע שמצאנו את הערך אין צורך סריקה בסדר להמשיך תחילי בסריקה )אפשר היה להשתמש בכל סריקה אחרת( } return Exists(bt.GetLeft(), x) Exists(bt.GetRight(), x); 61

2.האם כל הצמתים בעץ הם זוגיים? 62

עץ סכומים הוא עלה או עץ שבו כל צומת הוא סכום כל הצאצאים 63

עץ סכומים המשך האם הפתרון נכון?? הסבירו! 64

3.האם לכל צומת )לא עלה( יש שני בנים? 65

. 4.עץ-שווה בנים-הוא עץ בינארי לא ריק, ערך השורש שווה לסכום ערכי בניו וכל אחד מהבנים הוא עץ-שווה-בנים 66

. 4.פתרון שאלה "עץ-שווה-בנים" 67

5.עץ יורד הוא עלה או שורש ובן יחיד,כך שערך הבן קטן מערך השורש והבן עץ-יורד 68

5.פתרון שאלה עץ -יורד 69

"עץ_משולשים_ימניים" הוא עץ שבו צומת אחד, או עץ שבו לכל ילד ימני של צומת יש שני ילדים, וכל ילד שמאלי הוא עלה )כמתואר בשרטוט(. 70

5.פתרון שאלה עץ-משולש ימניים 71

. 6.עץ נקרא דור-שלשי הוא עץ לא ריק,אם קיים בעץ נכדים)נכד הוא בן של בן( 72

. 7.דוגמה נוספת 73

. 8.פעולה המקבלת 2 וגם במבנה לעץ השני-דוגמה עצים לא ריקים ומחזירה אמת אם העץ הראשון זהה בתוכן 74

פתרון עצים דומים 75

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

)t2 עץ מוכל?)האם עץ t1 מוכל בעץ 77

)t2 עץ מוכל?)האם עץ t1 מוכל בעץ 78

דוגמאות לפעולות כלליות 79

פעולה המקבלת 2 עצים ומחזירה רשימה חדשה המכילה האיברים המשותפים ל 2 עצים.)איברי העצים שונים זה מזה( 80

81

צאצא 82

מחרוזת המתארת את העץ public static string PreorderString (BinTreeNode<string> bt) { if (bt == null) return ""; return bt.getinfo() + " " + PreorderString (bt.getleft()) + PreorderString (bt.getright()); } ממשו את הפעולות PostorderString) ( ו-) ( InorderString 83

בגרות 2005 84

בגרות 2005 המשך פתרון 85

בגרות 2005 מועד מיוחד 86

בגרות מועד מיוחד המשך פתרון )נכתוב מחלקה חדשה( 2005 87

בגרות מועד מיוחד 2005 המשך פתרון 88

בגרות 2007 89

בגרות 2007 פתרון 90

בגרות 2004 91

בגרות 2004 פתרון 92

סריקה לפי רמות A רמות של עץ: 0 רמה D H 1 רמה 2 רמה G Z B 3 רמה 93 איך אפשר לסרוק לפי רמות ולהדפיס:?ADHGZB

סריקה לפי רמות הדפס-לפי-רמות )tree( בנה תור חדש של חוליות בינריות A הכנס את השורש לתוך התור D H כל עוד התור אינו ריק, בצע את הפעולות: הוצא חוליה מתוך התור G הדפס את ערך החוליה אם קיים לחוליה ילד שמאלי, הכנס אותו לתור Z B אם קיים לחוליה ילד ימני, הכנס אותו לתור G HB AZ D A D H G Z B 94

סריקה לפי רמות 95

96

שאלה ממשו פעולה בשם LevelOrderString המקבלת עץ חוליות בינרי של מחרוזות ומחזירה מחרוזת המתארת את תוכן העץ המסודר לפי רמות העץ. כדי לכתוב את הקוד יהיה עליכם להגדיר תור של חוליות בינריות מטיפוס מחרוזת, כלומר, הגנריות תכתב עבור החוליה הבינרית ועבור התור בו זמנית. ההגדרה הגנרית הכפולה הזו תיראה כך: Queue<BinTreeNode<string>> 97

שימוש בעץ חוליות בינרי בדיקת תקינות של ביטוי חשבוני 4 על מנת לפשט את הבעיה: מספרים חד ספרתיים בלבד אופרנדים. פעולות חשבון )חיבור, חיסור, כפל וחילוק( -אופרטורים. אין מספרים שליליים. הביטוי "ממוסגר לחלוטין". 98

ביטוי חשבוני ( 7 + 5 ) ( ( 3 * 4 ) + 2 ) ( ( 3 2 ) * ( ( 4 * 1 ) + 8 ) ) ( 3 + 5 ) * 4 ) 2 3 ( 7 ) ( 8 ) ביטויים חוקיים: ביטויים לא חוקיים: 99

ביטוי חשבוני ביטוי חשבוני הוא: A כאשר A הוא אופרנד )מספר חד ספרתי( או: (Y X) op כאשר X ו- Y הם ביטויים חשבוניים, האופרנדים של הפעולה, ו- op הוא פעולה. הגדרה רקורסיבית, דומה להגדרה של עץ 100

ביטוי חשבוני + אופרנדים רק בעלים: 7 5 הביטוי ) 5 :( 7 + + * 2 הביטוי ) 2 + ) 4 * 3 ( ( 3 4 * - + הביטוי ) ) 8 + ) 1 * 4 ( ( * ) 2 3 ( ( 3 2 * 8 101 4 1

שאלה כיצד ייוצג הביטוי:?( ( 4 + ( 7 * 8 ) ) ( 9 / 3 ) ) 102

חישוב ערך הביטוי החשבוני חשב-ערך-ביטוי )tree( אם העץ הוא עלה, החזר את ערכו אחרת, חשב-ערך-ביטוי )תת עץ שמאלי של )tree ושמור את התוצאה ב-.leftVal חשב-ערך-ביטוי )תת עץ ימני של )tree ושמוראת התוצאה ב-.rightVal שמור ב- op את הערך של השורש + החזר את: rightval(.) leftval op * 2 3 4 בצעו מעקב של האלגוריתם על העץ הנתון: 103

שאלה? ממשו את האלגוריתם חשב-ערך-ביטוי כפעולה בשם ComputeExprTree) ( 104

עץ-חיפוש-בינרי Tree) )Binary Search 6 15 16 כל הערכים הנמצאים בתת-עץ השמאלי של צומת כלשהו קטנים מהערך שבצומת, וכל הערכים הנמצאים בתת-עץ הימני של הצומת גדולים או שווים לערך זה. 5 8 26 6 9 105

איתור ערך בעץ-חיפוש-בינרי public static bool ExistsInBST (BinTreeNode<int> bst, int x) { if (bst == null) return false; if (bst.getinfo() == x) return true; if (x < bst.getinfo()) return ExistsInBST (bst.getleft(), x); הפרמטר הוא עץ-חיפוש-בינרי } return ExistsInBST (bst.getright(), x); 106

שאלה? כתבו גרסה איטרטיבית של הפעולה ExistsInBST) ( 107

מציאת ערך מינימלי בעץ-חיפוש-בינרי 15 היכן נמצא הערך הקטן ביותר? 6 16 האם תמיד הערך הקטן ביותר נמצא בצומת השמאלי ביותר? נמקו. 5 8 האם הצומת השמאלי ביותר הוא תמיד עלה? 26 6 9 היכן נמצא הערך הגדול ביותר בעץ? 108

הכנסת ערכים לעץ-חיפוש-בינרי ובניית עץ 5 15 6 16 26 8 18 6 9 18>15 7<15 נמשיך בעץ הימני לכן נמשיך 16<18 בעץ השמאלי 7>6 נמשיך בעץ הימני לכן נמשיך בעץ הימני 18<26 נמשיך בעץ 8>7 השמאלי אין עץ שמאלי, אז ניתן 7 לכן נמשיך בעץ השמאלי להוסיף כאן את הערך הכנס 18 הכנס 7 109 אין עץ ימני אז ניתן 7>6 להוסיף כאן את הערך לכן נמשיך בעץ הימני

שאלה? ממשו את הפעולה: public static void InsertIntoBST (BinTreeNode<int> bst, int x) הפעולה מכניסה מספר שלם לעץ-חיפוש-בינרי המכיל מספרים 110

הכנסת ערכים לעץ-חיפוש-בינרי ובניית עץ בעזרת פעולת ההכנסה שלמדנו ניתן ליצור עץ-חיפוש-בינרי: ניצור עץ עלה נכניס אליו את הערכים באופן שלמדנו. 111

בניית עץ 9 15 26 15, 9, 26, 5, 8, 6, 29, 30 5 29 8 30 6 15 15, 6, 5, 26, 30, 9, 29, 8 6 26 5 8 9 29 30 אותם איברים בסדר שונה, גורמים לבניית עץ שונה 112

שאלה ציירו עץ עבור כל אחת משתי סדרות האיברים הבאות: 30, 29, 26, 15, 9, 8, 6, 5 26, 30, 15, 5, 29, 8, 9, 6.1.2 113

עץ מלא עץ בינרי המלא בכל רמותיו נקרא עץ מלא: עץ לא מלא עץ לא מלא עץ מלא 114

יעילות הפעולות על עץ-חיפוש-בינרי ננתח את הפעולות בהנחה שהעץ מלא )או קרוב למלא(. הפעולות שראינו על עץ-חיפוש-בינרי )חיפוש איבר, הכנסה( אינן עוברות על כל הצמתים בעץ. למעשה הפעולות עוברות על צומת אחד בלבד בכל רמה. לכן יעילות הפעולות תלויה בגובה העץ. מה הוא גובה העץ כאשר יש בעץ n צמתים? 115

גובה עץ מה הוא גובה העץ בעל n צמתים? k 2 בעץ בעל k רמות יש צמתים ברמה האחרונה. בכל שאר הרמות )בהנחה שהעץ k k הוא עץ מלא יש 2 1 צמתים. סה"כ לצורך ניתוח היעילות ניתן להגיד שיש צמתים. 2 2 k 116

גובה עץ k אם יש צמתים,אזי נפתור את המשוואה: נוציא log משני האגפים : ניתן להתעלם מהבסיס של הlog )כי זו גם הכפלה בקבוע( הוא O(logn) ולטעון שמספר הרמות 2 k k k log n 2 log 2 k 2 log 2 2 n log 2 log n 2 n 2 117

מיון בעזרת עץ-חיפוש-בינרי שאלה: 5 6 15 9 26 סרקו את עץ-החיפוש-הבינרי בסדר ת וכי: האם תמיד סריקה בסדר ת וכי מחזירה סדרה ממוינת? נמקו. 30 8 29 כתבו פעולה המקבלת עץ-חיפוש-בינרי ומדפיסה את איבריו בצורה ממוינת בסדר יורד. 118

יעילות המיון בעזרת עץ-חיפוש-בינרי O(n log n) : בניית עץ לכל צומת מבצעים הכנסה O(n) סריקה תו כית יעילות המיון: n) O(n log מיון כזה נקרא מיון-עץ 119

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

סוף 121