E N D
CS2 in Java Peer Instruction Materials by Cynthia Lee is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.Based on a work at http://peerinstruction4cs.org.Permissions beyond the scope of this license may be available at http://peerinstruction4cs.org. CSE 12 – Basic Data Structures Cynthia Bailey Lee Some slides and figures adapted from Paul Kube’s CSE 12
Today’s Topics • Heap implementation issues • Heap uniqueness • Heapsort in place • HW suggestions • Back to generic binary trees • In-order traversal • Pre-order traversal • Post-order traversal • Level-order traversal (also called “breadth-first”)
Reading quiz! 1. A node in a binary tree may have ___ children • 0 • 1 • 2 • 3 • Other/none of the above/more than one of the above
Reading quiz! 2. A preorder traversal visits the current node, performs a preorder traversal of its ___ subtree and then performs a preorder traversal of the its ___ subtree. • right, right • left, right • left, left • right, left
Reading quiz! 3. A full binary tree is a tree in which every node other than the leaves has ____ children. • 0 • 1 • 2 • 3 • Other/none of the above/more than one of the above
TRUE OR FALSE • There is only one configuration of a valid min-heapcontaining the elements {34, 22, 3, 9, 18} • TRUE • FALSE
Heap outcomes by insert order Create a MIN-heap by inserting the elements, one by one, in the order given below for the first letter of your last name: • A-F: {3, 9, 18, 22, 34} • G-L: {3, 33, 18, 9, 34} • M-R: {9, 22, 18, 3, 34} • S-Z: {18, 22, 3, 9, 34}
Heap outcomes by insert order Create a MIN-heap by inserting the elements, one by one, in the order given below for the first letter of your last name: • A-F: {18, 9, 34, 3, 22} • G-L: {3, 18, 22, 9, 34} • M-R: {22, 9, 34, 3, 18} • S-Z: {34, 3, 9, 18, 22}
How many distinct min-heaps are possible for the elements {3, 9, 18, 22, 34} ? • 1 • 2-4 • 5-8 • 5! (5 factorial) • Other/none/more
Heapsort is super easy • Insert unsorted elements one at a time into a heapuntil all are added • Remove them from the heap one at a time. We will always be removing the next biggest[smallest] item from the max-heap[min-heap], so the items come out in sorted order! THAT’S IT!
Example: using heapsort to print an array in sorted order (note: this is not the in-place version you need for HW) public static void printSorted(String[] unsortedlist) { Heap<String> heap = new Heap<String>(); for (inti=0; i<unsortedlist.length; i++) { heap.add(unsortedlist[i]); } while (!heap.isEmpty()) { System.out.println(heap.remove()); } }
Implementing heapsort Devil’s in the details
We can do the entire heapsort in place in one array • Unlike mergesort, we don’t need a separate array for our workspace • We can do it all in place in one array (the same array we were given as input)
Important tip! • The in-place approach will not work if your test to see if index iis past the end of the heap is to check if heaparray[i] is null. • Things will be in the array that are NOT in the heap! • You need to keep track of an int size (in addition to an int capacity) in order to check where the heap ends!
Binary trees • Recall from last time, a binary tree is any tree where each node has 0, 1, or 2 children • That’s the only restriction • Recall: heaps are a special case of binary trees, and they have two additional restrictions
Trees vs. Lists • Lists have an obvious ordering • 1st element is first, 2nd element is second, … • Trees don’t • More than one reasonable order
Pre-order traversal preorder(node) { if (node != null){ visit this node preorder(node.left) preorder(node.right) } } • D B E A F C G • A B D E C F G • A B C D E F G • D E B F G C A • Other/none/more
Post-order traversal postorder(node) { if (node != null){ postorder(node.left) postorder(node.right) visit this node } } • D B E A F C G • A B D E C F G • A B C D E F G • D E B F G C A • Other/none/more
In-order traversal inorder(node) { if (node != null){ inorder(node.left) visit this node inorder(node.right) } } • D B E A F C G • A B D E C F G • A B C D E F G • D E B F G C A • Other/none/more