Lecture 11: Binary Search Tree and AVL Trees

Will include how to print BST elements and will continue discussion on AST Trees


  • Neal Malani

Accessing Elements in BST

Helpful tool: print contents of BST in sorted order

Q: How could we print the contents of a BST in sorted order?

  • One approach
    • Find the smallest element and print it
      • Keep going left
    • Find the next element and print it
      • Messy approach 1
        • Remove the smallest element
        • Find the new smallest element
        • Print
      • Messy approach 2
        • If there is a right child, go right, then left until there are no more left children. There will be the next smallest element
        • If no right child, look at the parent
        • Gets messy!
  • Idea: Use BST property that everything to the left of the root is smaller and everything right of the root is bigger
    • Observation
      • If we print
        • Stuff on the left side of the root
        • The root
        • Stuff on the right side of the root
      • Recursion
        • printInOrder()
          • to print everything, call it on the root
public class Node{
    private void printInOrder(){
        if (left != null){
        if (right != null){
  • Types of traversals
    • In order traversal
      • Process left subtree
      • Process self
      • Process right subtree
    • Preorder traversal
      • Process self
      • Process left subtree
      • Process right subtree
    • Postorder traversal
      • Process left subtree
      • Process right subtree
      • Process self
  • Post order traversals can help with finding height of a binary search tree
    • height(v) = 1 + max(height left, height right)

AVL Trees

  • Recall AVL Trees
    • Given v, a node, in a tree, say that v is (height) balanced if the height of the right child and the height of the left child differ at most by 1
    • An AVL tree is a tree in which all nodes are balanced
  • Fact: If T is an AVL Tree containing n nodes, then h(T) = Big O(log n)
    • Find, add, and remove take time Big O(log n)
  • Question: Start with an AVL tree T and add an element. How can we ensure the updated tree is AVL?
    • Node w = node added
    • Node z = first unbalanced ancestor of node w
    • Node y = child of z on the path to w
    • Node x = child of y on the path to w
  • Adding one node increased height by at most 1 <= h + 2
    • Also, >= h + 2 because there is an imbalance
  • Take the middle value, x, and make it the root

Things to think about

  • Does this restore the balance?
  • Does it maintain the BST property?
  • What is the running time?