יסודות מבני נתונים תרגול 6: עץ (Tree), עץ בינארי (Binary Tree),

Slides:



Advertisements
Similar presentations
AVL Trees When bad trees happen to good programmers.
Advertisements

SUNY Oneonta Data Structures and Algorithms Visualization Teaching Materials Generation Group Binary Search Tree A running demonstration of binary search.
1 BST Trees A binary search tree is a binary tree in which every node satisfies the following: the key of every node in the left subtree is.
CS 146: Data Structures and Algorithms June 18 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
Properties: -Each node has a value -The left subtree contains only values less than the parent node’s value -The right subtree contains only values greater.
Min Chen School of Computer Science and Engineering Seoul National University Data Structure: Chapter 7.
Lecture Objectives  To learn how to use a tree to represent a hierarchical organization of information  To learn how to use recursion to process trees.
24/3/00SEM107 - © Kamin & ReddyClass 16 - Searching - 1 Class 16 - Searching r Linear search r Binary search r Binary search trees.
Tree (new ADT) Terminology:  A tree is a collection of elements (nodes)  Each node may have 0 or more successors (called children)  How many does a.
TREES Lecture 12 CS2110 – Fall Announcements  Prelim #1 is tonight!  Olin 155  A-L  5:30  M-Z  5:30  A4 will be posted today  Mid-semester.
Binary Search Trees Binary Search Trees (BST)  the tree from the previous slide is a special kind of binary tree called a binary.
Tree Traversal.
Lecture – Searching a Tree Neil Ghani University of Strathclyde.
Lec 15 Oct 18 Binary Search Trees (Chapter 5 of text)
Binary Trees In computer science, a binary tree is a tree data structure in which each node has at most two children, which are referred to as the left.
H EAPS. T WO KINDS OF HEAPS : MAX AND MIN Max: Every child is smaller than its parent Meaning the max is the root of the tree 10 / \ 9 7 / \ 6 8 / \ 2.
AVL Trees An AVL tree is a binary search tree with a balance condition. AVL is named for its inventors: Adel’son-Vel’skii and Landis AVL tree approximates.
1/14/20161 BST Operations Data Structures Ananda Gunawardena.
Binary Search Trees (BST)
Lecture 19. Binary Search Tree 1. Recap Tree is a non linear data structure to present data in hierarchical form. It is also called acyclic data structure.
Traversing a tree means visiting each node in a specified order. There are different ways to traverse a tree. Tree Traversing Depth first search Pre-orderIn-orderPost-order.
Binary Search Trees CS340. Overview of a Binary Search Tree A set of nodes T is a binary search tree if either of the following is true T is empty If.
COSC 2P03 Week 21 Tree Traversals – reminder Breadth-first traversal: starting from root, visit all nodes on each level in turn, from left to right Depth-first.
CMSC 341 Binary Search Trees. 8/3/2007 UMBC CMSC 341 BST 2 Binary Search Tree A Binary Search Tree is a Binary Tree in which, at every node v, the values.
TREES Lecture 11 CS2110 – Spring Readings and Homework  Textbook, Chapter 23, 24  Homework: A thought problem (draw pictures!)  Suppose you use.
1 CSE 326: Data Structures Trees Lecture 6: Friday, Jan 17, 2003.
Lecture 9 Binary Trees Trees General Definition Terminology
Question 4 Tutorial 8. Part A Insert 20, 10, 15, 5,7, 30, 25, 18, 37, 12 and 40 in sequence into an empty binary tree
Fundamentals of Algorithms MCS - 2 Lecture # 17. Binary Search Trees.
ITEC324 Principle of CS III
Recursive Objects (Part 4)
Binary Search Tree (BST)
Design & Analysis of Algorithm n-ary Tree & Binary Tree
Trees Lecture 12 CS2110 – Fall 2017.
Section 8.1 Trees.
Trees Lecture 12 CS2110 – Fall 2016.
Tree Traversals – reminder
Binary Search Trees Definition (recursive):
Binary Search Trees.
Ch. 12: Binary Search Trees Ming-Te Chi
Threaded Trees Binary trees have a lot of wasted space: the leaf nodes each have 2 null pointers We can use these pointers to help us in inorder traversals.
Tree Traversals – reminder
Representation of a Threaded Tree
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
General Trees & Binary Trees
Binary Search Tree AVL Tree
Node Removal From BST Source:
Trees, BSTs- עצים ועצי חיפוש בינאריים
Trees, BSTs- עצים ועצי חיפוש בינאריים
Find in a linked list? first last 7  4  3  8 NULL
Tree A tree is a data structure in which each node is comprised of some data as well as node pointers to child nodes
Binary Search Trees (BSTs)
Ch. 12: Binary Search Trees Ming-Te Chi
תרגול 6 AVL Trees.
Trees Lecture 12 CS2110 – Fall 2018.
Binary Search Trees (13.1/12.1)
Chapter 12: Binary Search Trees
General Trees & Binary Trees
Drawing Tree wijanarto.
Binary Search Trees Chapter 9 2/22/2019 B.Ramamurthy.
Binary Search Trees Chapter 9 2/24/2019 B.Ramamurthy.
Announcements Prelim 1 on Tuesday! A4 will be posted today
CSC 143 Java Trees.
Binary SearchTrees [CLRS] – Chap 12.
Building Java Programs
Basic Data Structures - Trees
Tree traversals BST properties Search Insertion
CMSC 341 Binary Search Trees 8/3/2007 CMSC 341 BST.
Trees Trees.
Algorithms CSCI 235, Spring 2019 Lecture 21 Binary Search Trees
Presentation transcript:

יסודות מבני נתונים תרגול 6: עץ (Tree), עץ בינארי (Binary Tree), עץ חיפוש בינארי (BST - Binary Search Tree)

עץTree – עץ – מבנה נתונים המורכב מאוסף של צמתים (קדקודים) וקשתות עם יחס היררכי (הורה-ילד). כל צומת מורכבת מנתונים שמאוחסנים בה, ומאוסף של מצביעים לילדים של הצומת. שורש הורה אבות קדמונים של d ילד צאצאים של b

עץTree – עץ – מבנה נתונים המורכב מאוסף של צמתים (קדקודים) וקשתות עם יחס היררכי (הורה-ילד). כל צומת מורכבת מנתונים שמאוחסנים בה, ומאוסף של מצביעים לילדים של הצומת. צמתים פנימיים עלים

עץTree – עץ – מבנה נתונים המורכב מאוסף של צמתים (קדקודים) וקשתות עם יחס היררכי (הורה-ילד). כל צומת מורכבת מנתונים שמאוחסנים בה, ומאוסף של מצביעים לילדים של הצומת. גובה של עץ הוא גובה של השורש גובה של b- המסלול הארוך ביותר בתת העץ של b עומק של f – אורך המסלול מ f לשורש

עץ בינאריBinary Tree – עץ בינארי – עץ שבו לכל צומת יש לכל היותר שני ילדים (ימני ושמאלי). דוגמא: סריקות של עץ בינארי pre-order – שורש, תת עץ שמאלי, תת עץ ימני a,b,d,e,g,h,c,f in-order – תת עץ שמאלי, שורש, תת עץ ימני d,b,g,e,h,a,c,f post-order – תת עץ שמאלי, תת עץ ימני, שורש d,g,h,e,b,a,f,c

Question 1 Solution: From the pre-order we can see that “a” is the root.  Given this, from post-order we can divide nodes into left sub-tree [c,d,b] and right sub-tree [h,g,j,e,f].

Question 1

Question 2 האם ניתן לשחזר עץ בהנתן סריקות pre-order ו post-order ? תשובה: לא תמיד. דוגמא: pre-order: a,b post-order: b,a שני העצים אפשריים או a a b b

עץ חיפוש בינאריBinary Search Tree –  החל מהשורש, שמאלה עד הסוף  החל מהשורש, ימינה עד הסוף

עץ חיפוש בינאריBinary Search Tree –  החל מהשורש, שמאלה עד הסוף  החל מהשורש, ימינה עד הסוף החל מהצומת x, ימינה פעם אחת, ואז שמאלה עד הסוף דוגמא: Successor (T, 20) = 24 או למעלה עד שיש פעם אחת "למעלה ימינה" דוגמא: Successor (T, 28) = 30

עץ חיפוש בינאריBinary Search Tree –  החל מהשורש, שמאלה עד הסוף  החל מהשורש, ימינה עד הסוף החל מהצומת x, ימינה פעם אחת, ואז שמאלה עד הסוף דוגמא: Successor (T, 20) = 24 או למעלה עד שיש פעם אחת "למעלה ימינה" דוגמא: Successor (T, 28) = 30 החל מהצומת x, שמאלה פעם אחת, ואז ימינה עד הסוף דוגמא: Predecessor (T, 30) = 28 או למעלה עד שיש פעם אחת "למעלה שמאלה" דוגמא: Predecessor (T, 24) = 20

עץ חיפוש בינאריBinary Search Tree – with s

Question 3 בהנתן עץ חיפוש בינארי T ושתי מפתחות K1 ו K2, הציעו אלגוריתם המדפיס את כל הצמתים x של T אשר מקיימים K1 ≤ x.key ≤ K2. פתרון: נשתמש בסריקת inorder על העץ T עם שינוי קטן. נבדוק את הערך של השורש. אם השורש גדול מ 1K אז נלך רקורסיבית לתת עץ השמאלי. אם השורש בתחום אז נדפיס את המפתח של השורש. אם השורש קטן מ 2K אז נלך רקורסיבית לתת העץ הימני. T דוגמא: K1 = 3, K2 = 10 3 4 6 7 8 10 Print_in_interval (T, K1, K2) if T is Null return if T.root > K1 Print_in_interval (T.left, K1, K2) if K1 ≤ T.root ≤ K2 print T.root if T.root < K2 Print_in_interval (T.right, K1, K2)

Question 4 T נתון עץ חיפוש בינארי T עם n קודקודים וגובה h. לכל צומת x יש שדה x.size אשר מחזיר את מספר הצמתים בתת העץ של x (כולל x עצמו). הציעו אלגוריתם למימוש פונקצייה Greater (T, k) שרץ בזמן O(h)אשר מקבל מפתח K ומחזיר מהו מספר המפתחות בעץ הנתון שגדולים מ . k T Greater ( 20 , k=19)  answer is: 6 keys דוגמא: Greater ( 20 , k=19) 20 + 30 .size() + Greater ( 18 , k=19) Ø

Question 4 במקרה הגרוע, עברנו מהשורש עד לעלה בחיפוש אחר איבר עם מפתח K. נשים לב שבכל צומת שעברנו עליה, עושים מספר קבוע של פעולות. לכן במקרה הגרוע זמן ריצה חסום ע"י 𝑂 ℎ .

Question 5 נתונים שני עצי חיפוש בינאריים T1 וT2 עם גבהים h1 וh2 בהתאמה (הגבהים נתונים). נתון שכל הערכים בT1 קטנים ממש מכל הערכים בT2. הניחו שכל ערכי המפתחות שונים. כיצד ניתן לאחד את שני העצים לעץ אחד המכיל את איחוד הערכים בזמן O(min(h1,h2)), כך שגובה עץ האיחוד יהיה מינימלי ? מה יהיה גובה העץ המאוחד ? האם הגובה מינימלי ? T1 T2

Question 5 נתונים שני עצי חיפוש בינאריים T1 וT2 עם גבהים h1 וh2 בהתאמה (הגבהים נתונים). נתון שכל הערכים בT1 קטנים ממש מכל הערכים בT2. הניחו שכל ערכי המפתחות שונים. כיצד ניתן לאחד את שני העצים לעץ אחד המכיל את איחוד הערכים בזמן O(min(h1,h2)), כך שגובה עץ האיחוד יהיה מינימלי ? מה יהיה גובה העץ המאוחד ? T1 T2

Question 5

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

Question 6 פתרון (מתוקן): נשתמש בפונקציית עזר ששומרת את הגבולות העליונים והתחתונים של הערכים המורשים בתת-העץ −∞ ∞ 15 −∞ 15 8 8 15 20

Question 6 פתרון (מתוקן): נשתמש בפונקציית עזר ששומרת את הגבולות העליונים והתחתונים של הערכים המורשים בתת-העץ −∞ ∞ 15 −∞ 15 8 8 15 20

Question 6 פתרון (מתוקן): נשתמש בפונקציית עזר ששומרת את הגבולות העליונים והתחתונים של הערכים המורשים בתת-העץ −∞ ∞ 15 −∞ 15 15 ∞ 8 20 8 15 20 ∞ 10 30

Question 6 פתרון (מתוקן): נשתמש בפונקציית עזר ששומרת את הגבולות העליונים והתחתונים של הערכים המורשים בתת-העץ boolean isValid(Node root) { return isValidHelper(root, Integer.MIN_VALUE, Integer.MAX_VALUE) } boolean isValidHelper(Node curr, int min, int max) { if(curr.value < min || curr.value > max) return false if (curr.left != null && !isValidHelper(curr.left, min, curr.value)) if (curr.right != null && !isValidHelper(curr.right, curr.value, max)) return true } זמן הריצה הינו O(n). פתרון אפשרי נוסף הוא ביצוע הליכת Inorder ובדיקה שהיא ממוינת בסדר עולה. זמן ריצה O(n).