25
נננננ ננננננ ננננננ, ננננ נננננננ ננננננ1

מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

  • Upload
    alpha

  • View
    67

  • Download
    0

Embed Size (px)

DESCRIPTION

עץ. עצים. מבני הנתונים מערך ורשימה מתאימים לניהול סדרות. עץ מתאים לניהול אוספים בעלי קשרים היררכיים: לדוגמה: משפחה או מערכת קבצים. עצים בינריים. עץ בינרי ( Binary tree ) הוא שורש עם שני תת עצים לכל היותר , כאשר : - כל תת עץ הוא עץ בינרי - PowerPoint PPT Presentation

Citation preview

Page 1: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

1

Page 2: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

2

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

. קבצים: מערכת או משפחה לדוגמה

Page 3: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

3

שני עם שורש( הוא Binary treeעץ בינרי )•, כאשר :תת עצים לכל היותר

- כל תת עץ הוא עץ בינרי - שני התת עצים זרים זה לזה )אין להם

משותפים(צמתים

Page 4: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

4

, עץ ימני ועץ infoיש לעץ שלוש תכונות: •שמאלי.

3

9 6

14 34

Page 5: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

5

.BinaryTreeשם המחלקה הינו •

Page 6: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

6

public class BinaryTree<T>

{

private T info;

private BinaryTree<T> left;

private BinaryTree<T> right;

}

Page 7: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

7

Page 8: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

8

public BinaryTree(T x)

public BinaryTree(T x, BinaryTree<T> left, BinaryTree<T> right)

public T getInfo()

public void setInfo(T x) public BinaryTree<T> getLeft()

public BinaryTree<T> getRight()

public void setLeft(BinaryTree<T> left)

public void setRight(BinaryTree<T> right)

Page 9: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

9

BinaryTree<Integer> t1 = new BinaryTree<Integer>(4); t1.setLeft(new BinaryTree<Integer>(9));

t1.setRight(new BinaryTree<Integer>(6));

t1.setInfo(5);

4

9 6

5

Page 10: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

10

BinaryTree<Integer> t1 = new BinaryTree<Integer>(9);BinaryTree<Integer> t2 = new BinaryTree<Integer>(6);BinaryTree<Integer> t3 = new BinaryTree<Integer> (4, t1,t2);

4

69

Page 11: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

11

.BinaryTree. כתבו את המחלקה 1כתבו מחלקה ראשית הבודקת את המחלקה שכתבתם.

Page 12: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

12

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

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

Page 13: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

13

Yael
לבקש מהם לממש את הפעולה. סביר להניח שהרוב יממשו זאת בצורה של פסקל.
Page 14: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

14

public static <T> int numOfNodes(BinaryTree<T> tree) {

if (tree == null) return 0;

return numOfNodes(tree.getLeft()) + numOfNodes(tree.getRight())+1 ;

} public class BinaryTree{

public int numOfNodes(){

int leftCount = 0;

int rightCount = 0;

if ( this.getLeft() != null)

leftCount = this.getLeft().numOfNodes();

if (this.getRight() != null)

rightCount = this.getRight().numOfNodes();

return (leftCount + rightCount+1);

}

}

Yael
למעלה כתובה גרסה שהרוב יכתבו. לבקש מהם לממש זאת כפעולה פנימית, על מנת לראות את ההבדל.
Page 15: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

15

public static <T> int numOfNodes(BinaryTree<T> tree){if (tree == null) return 0;return numOfNodes(tree.getLeft()) + numOfNodes(tree.getRight())+1 ;

}

public static <T> int numOfNodes(BinaryTree<T> tree){int leftCount = 0;int rightCount = 0;

if ( tree.getLeft() != null) leftCount = numOfNodes(tree.getLeft());

if (tree.getRight() != null) rightCount = numOfNodes(tree.getRight());

return (leftCount + rightCount+1);

}

Yael
להתאים את הגרסה דל הפעולה החיצונית לזו הפנימית.
Page 16: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

16

)(סרוק-בסדר-תחילי

}}האלגוריתם סורק את העץ הנוכחי בסדר תחילי

בקר בשורש העץ

)( סרוק-בסדר-תחיליאם קיים תת עץ שמאלי, הפעל דרכו את

)( סרוק-בסדר-תחיליאם קיים תת עץ ימני, הפעל דרכו את

Page 17: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

17

):inorder (סריקה תֹוכית

)(סרוק-בסדר-תֹוכי

} האלגוריתם סורק את העץ הנוכחי בסדר תֹוכי{

)(סרוק-בסדר-תֹוכי אם קיים תת עץ שמאלי, הפעל דרכו את

בקר בשורש העץ

)( סרוק-בסדר-תֹוכיאם קיים תת עץ ימני, הפעל דרכו את

Page 18: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

18

רקורסיה:•public String preorderString()

}String str = this.getInfo()+” “;

if (this.getLeft() != null)str += this.getLeft().preorderString();

if (this.getRight() != null)str+= this.getRight().preorderString();

return str;{

Page 19: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

19

. הוסיפו את הפעולות :2

public String postorderString();

public String inorderString();

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

הפעולה.

הדפיסו את העץ שיצרתם בפעולה ראשית בשתי הדרכים.

Page 20: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

20

)(סרוק-לפי-רמות}האלגוריתם סורק את צומתי העץ לפי רמות, משמאל לימין. {

בנה תור חדש הכנס את העץ הנוכחי לתוך התור

כל עוד התור אינו ריק, בצע את הפעולות: הוצא עץ מתוך התור

בקר בשורשו של העץ אם קיים תת-עץ שמאלי לעץ, הכנס אותו לתור

אם קיים תת-עץ ימני לעץ, הכנס אותו לתור

Page 21: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

21

סריקה לפי רמות.•

,Queue , Listעליכם לצרף את המחלקה •Node.(מחלקות גנריות) שכתבנו עבורכם

levelOrderStringעליכם לממש את הפעולה •הסורקת את העץ לפי רמות.

Page 22: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

22

הבודקת האם עץ של מספרים שלמים מכיל ערך נתון: existsInברצוננו לכתוב פעולה•

public static boolean existsIn (BinaryTree<Integer> tree, int x) }

boolean resL = false; boolean resR = false;

if (tree.getInfo() == x) return true;

if (tree.getLeft() != null) resL = existsIn (tree.getLeft(),x);

if (tree.getRight() != null) resR = existsIn (tree.getRight(),x);

return (resL || resR);{

Page 23: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

23

פסקל:•function tree_is_empty(tree:tree_type): boolean;

begin

tree_is_empty:=(tree=NIL);

end;

סי:•int tree_is_empty(tree_type tree){

return tree == NULL;

}

Page 24: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

24

ג'אווה:•public class BinaryTree{

public boolean isEmpty(){

return this == null;

}

}

לא ניתן לעשות זאת !

Page 25: מבני הנתונים מערך ורשימה מתאימים לניהול סדרות

המרכז להוראת המדעים, האוניברסי טה העברית

25

ממשו שתי פעולות:•

public int leaves()

פעולה המחזירה את מספר העלים בעץ

public int height()

פעולה המחזירה את גובה העץ