Building Java Programs Binary Search Trees reading: 17.3 – 17.4.

Slides:



Advertisements
Similar presentations
Chapter 7. Binary Search Trees
Advertisements

Binary Trees. DCS – SWC 2 Binary Trees Sets and Maps in Java are also available in tree-based implementations A Tree is – in this context – a data structure.
Computer Science C++ High School Level By Guillermo Moreno.
CSE 143 Lecture 18 Binary Trees read slides created by Marty Stepp and Hélène Martin
CSE 143 Lecture 17 Binary Search Trees and Comparable slides created by Ethan Apter
CSE 143 Lecture 19 Binary Trees read slides created by Marty Stepp
CSE 143 Lecture 19 Binary Search Trees read 17.3 slides created by Marty Stepp
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.
CSCE 3110 Data Structures & Algorithm Analysis Binary Search Trees Reading: Chap. 4 (4.3) Weiss.
Building Java Programs Chapter 17 Binary Trees. 2 Creative use of arrays/links Some data structures (such as hash tables and binary trees) are built around.
CM0551 Exam Prep. What are an algorithm’s time and space complexity? (2 marks) Answer: The growth rate of the algorithm’s time requirement and the computer.
Building Java Programs Binary Search Trees; TreeSet.
CSE 143 Lecture 20 Binary Search Trees continued; Tree Sets read slides created by Marty Stepp and Hélène Martin
Searching: Binary Trees and Hash Tables CHAPTER 12 6/4/15 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education,
1 AVL Trees II Implementation. 2 Download: 2011_03_28_AVL_Tree/ File AVL_Tree_Demo.zip
24/3/00SEM107 - © Kamin & ReddyClass 16 - Searching - 1 Class 16 - Searching r Linear search r Binary search r Binary search trees.
CSE 143 Lecture 18 Binary Trees read slides created by Marty Stepp
Topic 15 The Binary Search Tree ADT Binary Search Tree A binary search tree (BST) is a binary tree with an ordering property of its elements, such.
Binary Search Trees Nilanjan Banerjee. 2 Goal of today’s lecture Learn about Binary Search Trees Discuss the first midterm.
Lecture – Searching a Tree Neil Ghani University of Strathclyde.
CSE 143 Lecture 10 Linked List Basics reading: slides created by Marty Stepp
Building Java Programs Bonus Slides Hashing. 2 Recall: ADTs (11.1) abstract data type (ADT): A specification of a collection of data and the operations.
CSE 143 Lecture 22 Binary Search Trees continued; Tree Sets read slides adapted from Marty Stepp and Hélène Martin
Building Java Programs Binary Trees reading: 17.1 – 17.3.
CSE 143 Lecture 21 Binary Search Trees, continued read slides created by Marty Stepp
CSE 143 Lecture 19 Binary Trees read slides created by Marty Stepp
CSE 373 Data Structures and Algorithms Lecture 9: Set ADT / Trees.
CSE 143 Lecture 20 Binary Search Trees read 17.3 slides created by Marty Stepp
(c) University of Washington20c-1 CSC 143 Binary Search Trees.
Lecture 19: Binary Trees reading: 17.1 – 17.3
CSE 143 Lecture 20 Binary Search Trees continued; Tree Sets
CSE 373 Binary search trees; tree height and balance
CSC 427: Data Structures and Algorithm Analysis
Recursive Objects (Part 4)
Building Java Programs
Trees.
Binary Search Trees.
Building Java Programs
Building Java Programs Chapter 17
Rick Mercer, Allison Obourn, Marty Stepp
slides created by Marty Stepp and Alyssa Harding
Building Java Programs
Binary Search Tree AVL Tree
Binary Trees Based on slides by Alyssa Harding & Marty Stepp
slides created by Marty Stepp and Hélène Martin
CSE 373: Data Structures and Algorithms
CSE 143 Lecture 20 Binary Search Trees, continued read 17.3
Lecture 12 CS203 1.
Building Java Programs
Building Java Programs
Binary Search Trees Chapter 9 2/22/2019 B.Ramamurthy.
Binary Search Trees continued; Tree Sets
Lecture 21: Binary Search Trees; TreeSet
slides created by Alyssa Harding
CSE 143 Lecture 25 Set ADT implementation; hashing read 11.2
CSE 373 Data Structures and Algorithms
Building Java Programs
BINARY TREE CSC248 – Data Structure.
CSC 143 Binary Search Trees.
Building Java Programs
Trees.
Building Java Programs
Lecture 21: Binary Search Trees; TreeSet
Binary Search Trees reading: 17.3 – 17.4
Hashing based on slides by Marty Stepp
slides created by Marty Stepp and Hélène Martin
Trees.
Lecture 9: Intro to Trees
Binary Search Trees Based on slides by Marty Stepp & Alyssa Harding
Presentation transcript:

Building Java Programs Binary Search Trees reading: 17.3 – 17.4

2 Binary search trees binary search tree ("BST"): a binary tree where each non-empty node R has the following properties: elements of R's left subtree contain data "less than" R's data, elements of R's right subtree contain data "greater than" R's, R's left and right subtrees are also binary search trees. BSTs store their elements in sorted order, which is helpful for searching/sorting tasks overall root

3 BST examples Which of the trees shown are legal binary search trees? xk qg m e b

4 Searching a BST Describe an algorithm for searching a binary search tree. Try searching for the value 31, then 6. What is the maximum number of nodes you would need to examine to perform any search? overall root

5 Exercise Convert the IntTree class into a SearchTree class. The elements of the tree will form a legal binary search tree. Write a contains method that takes advantage of the BST structure. tree.contains(29)  true tree.contains(55)  true tree.contains(63)  false tree.contains(35)  false overall root

6 Exercise solution // Returns whether this BST contains the given integer. public boolean contains(int value) { return contains(overallRoot, value); } private boolean contains(IntTreeNode node, int value) { if (node == null) { return false; // base case: not found here } else if (node.data == value) { return true; // base case: found here } else if (node.data > value) { return contains(node.left, value); } else { // root.data < value return contains(node.right, value); }

7 Adding to a BST Suppose we want to add new values to the BST below. Where should the value 14 be added? Where should 3 be added? 7? If the tree is empty, where should a new value be added? What is the general algorithm? overall root

8 Adding exercise Draw what a binary search tree would look like if the following values were added to an initially empty tree in this order:

9 Exercise Add a method add to the SearchTree class that adds a given integer value to the BST. Add the new value in the proper place to maintain BST ordering. tree.add(49) ; overall root 49

10 An incorrect solution // Adds the given value to this BST in sorted order. public void add(int value) { add(overallRoot, value); } private void add(IntTreeNode node, int value) { if (node == null) { node = new IntTreeNode(value); } else if (node.data > value) { add(node.left, value); } else if (node.data < value) { add(node.right, value); } // else node.data == value, so // it's a duplicate (don't add) } Why doesn't this solution work? overallRoot

The x = change(x) pattern read 17.3

12 A tangent: Change a point What is the state of the object referred to by p after this code? public static void main(String[] args) { Point p = new Point(1, 2); change(p); System.out.println(p); } public static void change(Point thePoint) { thePoint.x = 3; thePoint.y = 4; } // answer: (3, 4) 2 y 1 x p

13 Change point, version 2 What is the state of the object referred to by p after this code? public static void main(String[] args) { Point p = new Point(1, 2); change(p); System.out.println(p); } public static void change(Point thePoint) { thePoint = new Point(3, 4); } // answer: (1, 2) 2 y 1 x p 4 y 3 x

14 Changing references If a method dereferences a variable (with. ) and modifies the object it refers to, that change will be seen by the caller. public static void change(Point thePoint) { thePoint.x = 3; // affects p thePoint.setY(4); // affects p If a method reassigns a variable to refer to a new object, that change will not affect the variable passed in by the caller. public static void change(Point thePoint) { thePoint = new Point(3, 4); // p unchanged thePoint = null; // p unchanged What if we want to make the variable passed in become null ?

15 Change point, version 3 What is the state of the object referred to by p after this code? public static void main(String[] args) { Point p = new Point(1, 2); change(p); System.out.println(p); } public static Point change(Point thePoint) { thePoint = new Point(3, 4); return thePoint; } // answer: (1, 2) 2 y 1 x p 4 y 3 x

16 Change point, version 4 What is the state of the object referred to by p after this code? public static void main(String[] args) { Point p = new Point(1, 2); p = change(p); System.out.println(p); } public static Point change(Point thePoint) { thePoint = new Point(3, 4); return thePoint; } // answer: (3, 4) 2 y 1 x p 4 y 3 x

17 x = change(x); If you want to write a method that can change the object that a variable refers to, you must do three things: 1. pass in the original state of the object to the method 2. return the new (possibly changed) object from the method 3. re-assign the caller's variable to store the returned result p = change(p); // in main public static Point change(Point thePoint) { thePoint = new Point(99, -1); return thePoint; We call this general algorithmic pattern x = change(x); also seen with strings: s = s.toUpperCase();

18 The problem Much like with linked lists, if we just modify what a local variable refers to, it won't change the collection. private void add(IntTreeNode node, int value) { if (node == null) { node = new IntTreeNode(value); } In the linked list case, how did we actually modify the list? by changing the front by changing a node's next field overallRoot 49 node

19 Applying x = change(x) Methods that modify a tree should have the following pattern: input (parameter):old state of the node output (return):new state of the node In order to actually change the tree, you must reassign: node = change (node, parameters ); node.left = change (node.left, parameters ); node.right = change (node.right, parameters ); overallRoot = change (overallRoot, parameters ); your method node before node after parameterreturn

20 A correct solution // Adds the given value to this BST in sorted order. public void add(int value) { overallRoot = add(overallRoot, value); } private IntTreeNode add(IntTreeNode node, int value) { if (node == null) { node = new IntTreeNode(value); } else if (node.data > value) { node.left = add(node.left, value); } else if (node.data < value) { node.right = add(node.right, value); } // else a duplicate; do nothing return node; } What happens when node is a leaf? overallRoot