Créer une présentation
Télécharger la présentation

Télécharger la présentation
## Binary Trees, Binary Search Trees

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

**Binary Trees, Binary Search Trees**CS 3358 Data Structures**Trees**• Linear access time of linked lists is prohibitive • Does there exist any simple data structure for which the running time of most operations (search, insert, delete) is O(log N)? • Trees • Basic concepts • Tree traversal • Binary tree • Binary search tree and its operations**Trees**• A tree is a collection of nodes • The collection can be empty • (recursive definition) If not empty, a tree consists of a distinguished node r (the root), and zero or more nonempty subtrees T1, T2, ...., Tk, each of whose roots are connected by a directed edge from r**Some Terminologies**• Child and Parent • Every node except the root has one parent • A node can have an zero or more children • Leaves • Leaves are nodes with no children • Sibling • nodes with same parent**More Terminologies**• Path • A sequence of edges • Length of a path • number of edges on the path • Depth of a node • length of the unique path from the root to that node • Height of a node • length of the longest path from that node to a leaf • all leaves are at height 0 • The height of a tree = the height of the root = the depth of the deepest leaf • Ancestor and descendant • If there is a path from n1 to n2 • n1 is an ancestor of n2, n2 is a descendant of n1 • Proper ancestor and proper descendant**Example: Expression Trees**• Leaves are operands (constants or variables) • The internal nodes contain operators • Will not be a binary tree if some operators are not binary**Tree Traversal**• Used to print out the data in a tree in a certain order • Pre-order traversal • Print the data at the root • Recursively print out all data in the left subtree • Recursively print out all data in the right subtree**Preorder, Postorder and Inorder**• Preorder traversal • node, left, right • prefix expression • ++a*bc*+*defg**Postorder traversal**left, right, node postfix expression abc*+de*f+g*+ Inorder traversal left, node, right infix expression a+b*c+d*e+f*g Preorder, Postorder and Inorder**Example: Unix Directory Traversal**PostOrder PreOrder**Binary Trees**• A tree in which no node can have more than two children • The depth of an “average” binary tree is considerably smaller than N, even though in the worst case, the depth can be as large as N – 1. Generic binary tree Worst-casebinary tree**Node Struct of Binary Tree**• Possible operations on the Binary Tree ADT • Parent, left_child, right_child, sibling, root, etc • Implementation • Because a binary tree has at most two children, we can keep direct pointers to them**Binary Search Trees (BST)**• A data structure for efficient searching, inser-tion and deletion • Binary search tree property • For every node X • All the keys in its left subtree are smaller than the key value in X • All the keys in its right subtree are larger than the key value in X**Binary Search Trees**A binary search tree Not a binary search tree**Binary Search Trees**The same set of keys may have different BSTs • Average depth of a node is O(log N) • Maximum depth of a node is O(N)**Searching BST**• If we are searching for 15, then we are done. • If we are searching for a key < 15, then we should search in the left subtree. • If we are searching for a key > 15, then we should search in the right subtree.**Searching (Find)**• Find X: return a pointer to the node that has key X, or NULL if there is no such node • Time complexity: O(height of the tree)**Inorder Traversal of BST**• Inorder traversal of BST prints out all the keys in sorted order Inorder: 2, 3, 4, 6, 7, 9, 13, 15, 17, 18, 20**findMin/ findMax**• Goal: return the node containing the smallest (largest) key in the tree • Algorithm: Start at the root and go left(right) as long as there is a left (right) child. The stopping point is the smallest (largest) element • Time complexity = O(height of the tree)**Insertion**• Proceed down the tree as you would with a find • If X is found, do nothing (or update something) • Otherwise, insert X at the last spot on the path traversed • Time complexity = O(height of the tree)**Deletion**• When we delete a node, we need to consider how we take care of the children of the deleted node. • This has to be done such that the property of the search tree is maintained.**Deletion under Different Cases**• Case 1: the node is a leaf • Delete it immediately • Case 2: the node has one child • Adjust a pointer from the parent to bypass that node**Deletion Case 3**• Case 3: the node has 2 children • Replace the key of that node with the minimum element at theright subtree • Delete that minimum element • Has either no child or only right child because if it has a left child, that left child would be smaller and would have been chosen. So invoke case 1 or 2. • Time complexity = O(height of the tree)