3 Tree Terminology [1] n1 n4 n3 n2 n6 n5 n1 is called the root noden2 and n3 are children of n1n4, n5, n6 are children of n2n4, n5, and n6 are siblingsn1 is a parent of n2 and n3n3, n4, n5, and n6 are leaves, since they do not have any childrenAll other nodes are interior nodesn1n4n3n2n6n5

4 Tree Terminology [2] n1 n4 n3 n2 n6 n5n2, n3, n4, n5, and n6 are descendants of n1n1 and n2 are ancestors of n5n2 is the root of a sub-tree T

5 Conditions for a tree It has a root. All nodes have a unique parent.Following parents from any node in the tree, we eventually reach the root.

6 Inductive Definition of TreesBasis: A single node n is a tree.Induction: For a new node r and existing trees T1, T2, ... , Tk, designate r as the root node and make all Ti its children.Subtrees are often drawn as triangles. We do not know the size of each of the sub-trees. They can be as small as a single node.T1T3T2Tk...r

7 Height and Depth of a treeThe height of the tree is the length of the longest path between any node and the root.n1n2n31The depth (level) of a node is the length of the path to the root.n4n5n62The height of the tree is 3.n7n8The depth or level of node n5 is 2. The depth of the root node is always 0.33

8 Expression Trees Describe arithmetic expressions Inductively definedA tree can be as little as containing a single operand, e.g. a variable or integer (basis)Trees can be inductively generated by applying the unary operator “-” to it or combing two trees via binary operators (+, - , * , / )

10 Tree Data StructuresIn C we can define a structure, similarly to linked lists.use malloc to allocate memory for each nodenodes “float” in memory and are reached via pointersIn C++ we can also use classes to represent the individual nodes (and we will for this class)Trees can also be represented by arrays of pointers

11 Trees as “Array of Pointers” using ClassesA tree contains the functions that are executed on a treeIt has a pointer to the “access point” of the tree, the root node.

12 Trees as “Array of Pointers” using ClassesEach node contains dataEach node contains an array of pointers to its childrenEach child is represented by a the root of a tree (sub-tree)Since CTree is a friend class, it can access the private data of CNode

14 Functions of CTree Insert Search Remove creates a new node.navigates through the tree to place the node in the corresponding spot.Searchnavigates through the tree to the spot where the search value is suspected.returns true is the search was successful, false otherwise.Removeexecutes a search on the tree.deletes the element if it exists.

27 Binary Tree Traversal: InorderList a node after its left child has been listed and before its right child has been listedn4, n2, n6, n5, n7, n1, n3For expression trees: results in infix expressionsn1n2n3n4n5n6n7

32 Structural Induction - Example [2]Basis: T consists of a single node. m_chOperator has the value ‘i’ and the value (stored in m_nData) is returned.

33 Structural Induction - Example [3]Induction: If T is not a leaf:v1 and v2 contain the values of the left and right subtrees (by inductive hypothesis).In the switch statement the corresponding operator is applied → correct value returned. ∎

34 Binary Search Trees Suitable for so-called dictionary operations:insertdeletesearchBinary Search Tree property: All nodes in left subtree of a node x have labels less than the label of x, and all nodes in the right subtree of x have labels greater than the label of x.

42 Deletion Search for element xIf x does not exist, there is nothing to deleteIf x is a leaf, simply delete leafIf x is an interior nodeReplace by largest element of left subtreeOR replace by smallest element of right subtreeDeletion is recursive! The node we use to replace the originally deleted node must be deleted recursively!What would happen if we replaced node by the smallest element of the left subtree?

44 Priority QueuesThe elements of a priority queue have priorities. If an element with a high priority arrives, it passes all the elements with lower priorities.e.g. Scheduling algorithms in operating systems make use of priority queues.Priority queues are often implemented using heaps, a type of partially ordered tree (POT).

45 Heaps 4 5 2 8 7 3 A node must have a greater value than its children.1719731014A node must have a greater value than its children.A heap is always complete: all levels except the last level are completely filled.Heaps are usually implemented via arrays.

46 Array Representation of Heaps19A[2]A[3]1714A[4]A[5]A[6]A[7]17810752473123456789101112191714A[8]A[9]A[10]A[11]A[12]For a node A[i], we find its left child at A[2i] and A[2i+1].Example: Children of the node A[5] are A[2*5] and A[2*5+1].

47 Priority Queue Operations: Insert [1]4528171973101415Insert into the last level using the first available spot. If the last level is full, create a new level.

50 Priority Queue Operations: Deletemax [1]The element with the highest priority will be served first and therefore, will be removed first.45281719731014

51 Priority Queue Operations: Deletemax [2]The element with the highest priority will be served first and therefore, will be removed first.45281719731014The root node must be replaced. We choose the rightmost node of the last level.

52 Priority Queue Operations: Deletemax [3]Bubble Down: Compare with parent and if one or both of the children are larger, then exchange it with the larger one of the children.452817371014

53 Priority Queue Operations: Deletemax [4]Bubble Down: Compare with parent and if one or both of the children are larger, then exchange it with the larger one of the children.452817371014

54 Priority Queue Operations: Deletemax [5]Bubble Down: Compare with parent and if one or both of the children are larger, then exchange it with the larger one of the children.452831771014What if we swap it with the smaller one of the children?

55 Priority Queue Operations: Deletemax [6]Bubble Down: Compare with parent and if one or both of the children are larger, then exchange it with the larger one of the children.432851771014

56 Heap SortHeapify the array: Insert elements one by one into an initially empty MaxHeap.Repeatedly call deletemax: We obtain the elements in a sorted order from largest to smallest.To obtain elements sorted from smallest to largest, we can use a MinHeap instead and repeatedly call deletemin.

59 Summary HeapsHighest priority element in the root. Each node’s children are smaller than the node itself.We have seen “max-heaps”, where the greatest number is in the root.Analogously there are “min-heap”, where the smallest number is in the root.Insertion: Add to end and “bubble-up”Deletemax: Remove root element and “bubble-down”Heaps can be used for sorting (HeapSort)