340 likes | 455 Views
AVL Tree. Chapter 6 (cont’). Search Trees. Two standard search trees : Binary Search Trees (non-balanced ) All items in left sub-tree are less than root All items in right sub-tree are greater than or equal to the root Each sub-tree is a binary search tree AVL trees (balanced ).
E N D
AVL Tree Chapter 6 (cont’)
Search Trees • Two standard search trees: • Binary Search Trees (non-balanced) • All items in left sub-tree are less than root • All items in right sub-tree are greater than or equal to the root • Each sub-tree is a binary search tree • AVL trees (balanced)
BST Traversals • A preorder traversal of the BST produces: 23 18 12 20 44 35 52 • A postordertraversal of the BST produces: 12 20 18 35 52 44 23 • An inorder traversal of the BST produces: 12 18 20 23 35 44 52 (a sorted list!)
BST Search Algorithms • Find Smallest Node: recursively follow the left branch until reaching a leaf • Find Largest Node: recursively follow the right branch until reaching a leaf • BST Search: recursively search for key node in a sub-tree (similar to the binary search)
Algorithm : Find Smallest algorithm findSmallestBST (val root <pointer>) • if (root->left null) return (root) • end if • return findSmallestBST (root->left) end findSmallestBST
Algorithm : Find Largest algorithm findLargestBST(val root <pointer>) • if (root->right null) return (root) • end if • return findLargestBST(root->right) end findLargestBST
Algorithm : BST Search algorithm searchBST (ref root <pointer>, val argument <key>) • if (root is null) • return null • end if • if (argument < root->key) • return searchBST (root->left, argument) • elseif (argument > root->key) • return searchBST (root->right, argument) • else • return root • end if end searchBST
Algorithm : Recursively add node to BST • algorithm addBST (ref root <pointer>, val new <pointer>) • if (root is null) • root = new • else • Locate null sub-tree for insertion • if (new->key < root->key) • addBst (root->left, new) • else • addBst (root->right, new) • end if • end if • return • endaddBST
2- AVL Trees • Invented by Adelson-Velskii and Landis • Height-balanced binary search tree where the heights of sub-trees differ by no more than 1: • | HL – HR | <= 1 • Search effort for an AVL tree is O(log2n) • Each node has a balance factor • Balance factors may be: • Left High (LH) = +1 (left sub-tree higher than right sub-tree) • Even High (EH) = 0 (left and right sub-trees same height) • Right High (RH) = -1 (right sub-tree higher than left sub-tree)
Balancing Trees • Insertions and deletions potentially cause a tree to be imbalanced • When a tree is detected as unbalanced, nodes are balanced by rotating nodes to the left or right • Four imbalance cases: • Left of left: the sub-tree of a left high tree has become left high • Right of right: the sub-tree of a right high tree has become right high • Right of left: the sub-tree of a left high tree has become right high • Left of right: the sub-tree of a right high tree has become left high • Each imbalance case has simple and complex rotation cases
Case 1: Left of Left • The sub-tree of a left high tree has become left high • Simple right rotation: Rotate the out of balance node (the root) to the right • Complex right rotation: Rotate root to the right, so the old root is the right sub-tree of the new root; the new root's right sub-tree is connected to the old root's left sub-tree
Case 2: Right of Right • Mirror of Case 1: The sub-tree of a right high tree has become right high • Simple left rotation: Rotate the out of balance node (the root) to the left • Complex left rotation: Rotate root to the left, so the old root is the left sub-tree of the new root; the new root's left sub-tree is connected to the old root's right sub-tree
Case 3: Right of Left • The sub-tree of a left high tree has become right high • Simple double rotation right: Rotate left sub-tree to the left; rotate root to the right, so the old root's left node is the new root • Complex double rotation right: Rotate the right-high left sub-tree to the left; rotate the left-high left sub-tree to the right
Case 4: Left of Right • Mirror of Case 3: The sub-tree of a right high tree has become left high • Simple double rotation right: Rotate right sub-tree to the right; rotate root to the left, so the old root's right node is the new root • Complex double rotation right: Rotate the left-high right sub-tree to the right; rotate the right-high right sub-tree to the left
AVL Node Structure Node key <keyType> data <dataType> Left <pointer to Node> right <pointer to Node> bal <LH, EH, RH> // Balance factor End Node
Chapter 7 Multiway trees
A tree was defined as either an empty structure or a structure whose children are disjoint trees. • This means that each node in some kind of trees can have more than two children. • This tree is called a multiway tree of order m, or m-way tree • A multiway search tree of order m is a multiway tree in which : • Each node has m children and m-1 keys. • The keys in each node are in ascending order. • The keys in the first i children are smaller than the ith key. • The keys in the last m-i children are larger than the ith key.
B-Tree • B- Trees operates closely with secondary storage. • Property: the size of a node can be made as large as a block. • A B- tree of order m is a multi way search tree with the following properties: • The root has at least two subtrees unless it is a leaf. • Each nonroot and each nonleaf node holds k-1 keys and k pointers to subtrees where [m/2] ≤ k ≤ m. • Each leaf node holds k-1 keys where [m/2] ≤ k ≤ m. • All leaves are usually on the same level.