340 likes | 462 Vues
This chapter explores two standard types of search trees: Binary Search Trees (BST) and AVL Trees. BSTs maintain a hierarchical structure, ensuring all left sub-tree items are less than the root, while AVL Trees provide self-balancing capabilities to maintain efficiency in search operations. The text covers key algorithms for traversal (preorder, postorder, and inorder), searching for the smallest and largest nodes, as well as insertion and deletion processes. Additionally, it delves into tree balancing techniques that utilize rotations to maintain height balance, enhancing search performance.
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.