CSC 207 Grinnell College Fall, 2018
 
Algorithms and Object-Oriented Design
 

More Binary Search Trees

Goals

This lab provides more experience with binary search trees, building on the previous lab on trees.

When submitting this lab, use the github URL: https://classroom.github.com/g/DzlMFzfP

Background

  1. Work in this lab involves the following classes that were introduced in the previous lab.

    Be sure that these classes are available within the eclipse environment and available for further development.

Computing the Height of a Tree

The reading for this lab defines the length of a path within a tree, the depth or level of a node within a tree, and the height of a tree.

  1. Consider the following binary search tree:

    another binary search tree

    1. Identify the levels of the nodes with labels a, f, g, k, l, and p.
    2. What is the height of this tree? Briefly explain your answer.

  2. Add a method nodeLevel to BSTree that returns the level of a node; nodeLevel should take a node's data (class E) as parameter. (If the tree does not contain a node with the given data, the method should return -1.)

  3. Write a method height that returns the height of a binary search tree.
    (Use of global variables for this method will be subject to a substantial penalty — perhaps 75%.)

Determining if a Tree is Height Balanced

Today's reading draws upon Computer Science 2: Principles of Software Engineering, Data Types, and Algorithms by Henry M. Walker [Scott, Foresman and Company, 1989]. In particular, the reading defines when a tree is balanced or completely balanced.

  1. Consider tree B above, and consider tree A below:

    a binary search tree

    Determine if either of these trees is balanced. In each case, justify your answer.

  2. Write a method isBalanced that determines if a given binary search tree is (completely) balanced.
    (Use of global variables for this method will be subject to a substantial penalty — perhaps 75%.)

Today's reading also defines when a tree is height-balanced.

  1. Apply this definition to determine if the trees in Tree C and Tree D (below) are height balanced.

    examples of binary search trees
  2. Write a method isHeightBalanced that determines if a given binary search tree is height balanced.
    (Use of global variables for this method will be subject to a substantial penalty — perhaps 75%.)

Deletion of a Node

Removal of a node with both left and right children

In the original Tree B, suppose we wish to remove the root, node k. We cannot just remove node k, since it connects two subtrees. Also, we cannot just move the left or right subtree upward to the root, because we must include the other subtree in the final structure as well. Instead, we first consider what values might replace 'k' in the root. In order to retain the ordering of nodes within a search tree, there are only two choices:

  1. Write a brief argument explaining why these are the only two values that could be moved to the root.

The remove Method

  1. Write a method remove that takes a value as parameter and that removes the node with that value from the binary search tree.
    (Use of global variables for this method will be subject to a substantial penalty — perhaps 75%.)

Tree Traversals

  1. Consider a binary search tree of Entry objects, as defined at the start of this lab and in the reading. Write a method

          Entry findLongest (BSTree<Entry>)
        

    that searches the tree for the Entry with the longest first name (i.e., the first name of the Entry has the most number of letters). In case the first names in two or more Entrys have the same number of letters, findLongest should return the Entry for which the first name comes last in dictionary order.
    (As with other steps in this labs, the use of global variables for this method wil be subject to a substantial penalty — up to 75%.)

  2. For your findLongest method in step 11, suppose the initial tree contains n nodes, and suppose the height of the overall tree is k. Analyze your code to determine the order O(???) of the algorithm— giving both the careful analysis of work done and a clear statement of the conclusion.


created 21 April 2000
revised 24 March 2005
revised 24 April 2012
last revised 3 November 2018
Valid HTML 4.01! Valid CSS!
For more information, please contact Henry M. Walker at walker@cs.grinnell.edu.