Download Presentation
## Binary Trees

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Binary Trees**• Informal defn: each node has 0, 1, or 2 children • Formal defn: a binary tree is a structure that • contains no nodes, or • is comprised of three disjoint sets of nodes: • a root • a binary tree called its left subtree • a binary tree called its right subtree • A binary tree that contains no nodes is called empty • Note: the position of a child matters!**Binary Trees**• Full binary tree : • All internal nodes have two children. • Complete binary tree : • All leaves have the same depth • All internal nodes have two children • A complete binary tree of height h has 2h-1 internal nodes and 2h leaves • Also: a binary tree with n nodes hasheight at least lgn **Tree applications**• Expression evaluations (note how different traversals result in different notation) • Parsing (as part of the compilation process) • Storing and retrieving information by a key • Representing structured objects (e.g. the universe in an adventure game) • Useful when needing to make a decision on how to proceed (tic-tac-toe, chess)**Binary tree traversal**• Traversing a tree = visiting its nodes • There are three ways to traverse a binary tree • preorder : visit root, visit left subtree, visit right subtree • inorder : visit left subtree, visit root, visit right subtree • postorder : visit left subtree, visit right subtree, visit root**Example: Inorder traversal**template <class T> Tree<T>::Inorder(TreeNode<T> *subroot ) { if (subroot!=NULL) { Inorder(subroot left); cout << subrootelement; Inorder(subroot right); } }**Binary trees**• Use for storing and retrieving information • We want to insert, delete and search at least as fast and, if possible, faster than with a linked list • We want to take advantage of the lgn height • Idea: Store information in an ordered way (use a key) • Result: a Binary Search Tree (BST)**Binary Search Tree (BST)**• A BST is a binary tree with the following property: • The key of the root is larger than any key in the left subtree and smaller than any key in the right subtree (the subtrees are also BSTs) • Note: This definition does not allow duplicate keys. • It’s now easy to search for an element**Binary Search Tree (BST)**• How do we insert an element into a BST? • We have to make sure it is inserted at the correct position. • It is a combination of Search and Insert.**Binary Search Tree (BST)**• How do we remove an element from a BST? • Removing a leaf is easy • Removing an internal node can be tricky. • The tree will need to be rearranged(how?)**Balanced trees**• The good news: Why not sort a sequence by inserting the elements into a BST? • on average O(nlgn) comparisons • we get to keep the tree • The bad news: The insertion procedure can result in a tree of height n after inserting n elements. • We would prefer to get trees that are guaranteed to have logarithmic height in the worst case. • Such trees are called balanced.**AVL trees**• AVL tree = a binary search tree with the following property: for every node the heights of the left and right subtrees differ at most by one. • That’s all very nice but how do we guarantee it? • We have to somehow modify the insert and delete functions. • If, after an insertion or deletion, the property is not satisfied, we “rotate” the tree to make it balanced.**AVL trees**• When can an insertion of a child y at node x cause an imbalance? • when both x and y are left children • when both x and y are right children • when x is a right child and y is a left child • when y is a right child and x is a left child**AVL trees**• There are two types of rotations: • single rotation • fixes imbalance of type 1/2 • double rotation • fixes imbalance of type 3/4 • Let’s draw some trees...**AVL trees**• How/when do we decide whether to rotate? • Example: insertion • step 1: walk down the tree to insert the node in the correct position • step 2: walk up the tree checking the property at each node • we need a helper function to determine the heights of the subtrees of each node. • we need to be able to determine whether to perform a single or a double rotation**AVL trees**• Just how balanced are AVL trees? • It can be shown that the worst case height of an AVL tree is at most 44% more than the minimum possible for BST (i.e. approximately 1.44 lgn) • What does this mean? • Searching/Inserting/Removing now take O(lgn) in the worst case.