Assignment 7 – Binary Search Trees II

$24.99 $18.99

OBJECTIVES Delete nodes in a BST Create a super data structure combining BST and LL [NOTE: Starter code for MovieTree.cpp will be released after closure of assignment 6] Overview Conceptually, this assignment builds off the previous assignment but with a different data-structure. Please make sure the header files are downloaded from the current assignment and…

5/5 – (2 votes)

You’ll get a: zip file solution

 

Categorys:

Description

5/5 – (2 votes)

OBJECTIVES

  1. Delete nodes in a BST

  1. Create a super data structure combining BST and LL

[NOTE: Starter code for MovieTree.cpp will be released after closure of assignment 6]

Overview

Conceptually, this assignment builds off the previous assignment but with a different data-structure. Please make sure the header files are downloaded from the current assignment and not the previous one.DO NOT MODIFY THE HEADER FILE. However, you may implement helper functions in your .cpp file.

MovieTree Class

Your task is to implement a Binary Search Tree (BST) where each node is a Linked List (LL) of movies. You are also required to perform a left rotation of a given node while maintaining the BST property. The nodes of the tree are alphabetically ordered i.e., with ‘d’as a parent node ‘c’ appears in its left sub-tree and ‘e’appears in its right sub-tree. The characters are the first letter of the movie. As more than one movie can have the same starting character, within the node, they are stored as an alphabetically sorted Linked List. For example:

CSCI 2270 – Data Structures

Instructors:

MovieTree::MovieTree()

  • Constructor: Initialize any member variables of the class to default

MovieTree::~MovieTree()

  • Destructor: Free all memory that was allocated. This includes deallocating the memory of the underlying nodes’ Linked Lists as well.

void MovieTree::showMovieCollection()

  • Print every movie in the data structure in alphabetical order of titles using the following format. ForTreeNode​​tandLLMovieNode​​m:

// for every TreeNode (t) in the tree

cout​​<<​​“Movies starting with letter: “<<t->titleChar<<​​endl;

// for every LLMovieNode (m) attached to t

cout​​<<” >> “<<m->title <<” “<< m->rating <<​​endl;

CSCI 2270 – Data Structures

Instructors:

Sample output format

Movies starting with letter:B

  • Bowling for Columbine 8 Movies starting with letter:D

  • Dancin’ Outlaw 8.1

  • Dogtown and Z-Boys 7.7

  • Down from the Mountain 7.4

void MovieTree::insertMovie(intranking, stringtitle, intyear, float rating)

  • Add a movie to the data structure in the correct place based on itstitle.

    • Create a Linked List node with the associated data (ranking, title, year, and rating)

    • If no tree node exists (based on the first character of the title), create a new tree node and insert the newly created Linked List node into it.

    • Otherwise, insert into an existing Linked List and ensure alphabetical order is maintained.

node->title < node->next->title

Hint: you can compare strings with <, >, ==, etc.Also,you may assume that no two movies have the same title

  • When adding a newTreeNode,ensure its parent pointers are set.

void MovieTree:: removeMovieRecord(std::stringtitle)

  • Delete the Linked List node that contains thetitle.

    • If deletion results in an empty Linked List, delete the associated tree node. And replace the tree node with itsinorder successor(min of the right sub-tree).

    • If the movie does not exist in the data-structure, print the following message

cout<<“Movie not found.”<<endl;

  • Make sure to adjust the parent pointer when deleting a tree node.

CSCI 2270 – Data Structures

Instructors:

void MovieTree::leftRotation(TreeNode* curr)

Rotate the nodecurr towards the left. Refer to the following illustration. A left rotation is performed at nodex.

  • Set the parent pointers accordingly:

    • Parent ofxbecomes the parent ofy

    • Parent ofxbecomesy.

  • Set the subtree (left and right children) pointers accordingly.

    • The left subtree ofybecomes the right subtree ofx.

    • xand its descendants become the left subtree ofy.

  • Ifx was the left (or right ) subtree ofxp, makey the left (or right) subtree ofx respectively. This can be checked by comparing the title characters of the parent and the child’s node.

  • Ensure boundary conditions are accounted for:

    • Xis root.

    • Xhas no right child.

CSCI 2270 – Data Structures

Instructors:

The following functions are available as a part of the starter code.

void MovieTree::inorderTraversal()

This function performs an inorder traversal in the tree, printing the title character at each node. This will print the title characters in an inorder fashion. This will be useful for debugging purposes. If you want, you may use this function to create yourpreorderTraversal() and

postorderTraversal()functions.

TreeNode* MovieTree::searchCharNode(char key)

This function returns a node in the tree with the titleChar key.

Driver

Code for the driver (main function) is given as part of the starter code. Here is a brief description about the main function.

Your main function should first read information about each movie from a file and store that information in aMovieTree object. The name of the file is passed as a command-line argument. An example file isMovies.csvon Moodle. It is in the format:

<Movie 1 ranking>,<Movie 1 title>,<Movie 1 year>,<Movie 1 rating> <Movie 2 ranking>,<Movie 2 title>,<Movie 2 year>,<Movie 2 rating> Etc

Note: For autograding’s sake, insert the nodes to the tree in the order they are read in.After reading in the information on each movie from the file, display a menu to the user.

cout<<“======Main Menu======”<<endl; cout<<“1. Delete a movie”<<endl; cout<<“2. Show the inventory”<<endl; cout<<“3. Left rotate the tree”<<endl; cout<<“4. Quit”<<endl;

The options should have the following behavior:

  • Print the inventory:Call your tree’sshowMovieCollectionfunction

  • Delete a movie:Call yourremoveMovieRecordfunction on a title specified by the user. Prompt the user for a movie title using the following code:

cout<<“Enter a movie title:”<<endl;

CSCI 2270 – Data Structures

Instructors:

  • Left rotate the tree:Ask the user to enter thetitleCharfor the node to rotate left. If that is a valid node perform the rotation.

cout<<“”give the titleChar of the node:””<<endl; string nodename;

getline(cin, nodename);

TreeNode* rNode = movies.searchCharNode(nodename[0]); if (rNode)

movies.leftRotation(rNode);

  • Quit:Exit after printing a friendly message to the user: cout<<“Goodbye!”<<endl;

“Please note that once you are done with your assignment on code runner you need to click on ‘finish attempt’ and the ‘submit all and finish’. If you don’t do this, you will not get graded.”

Assignment 7 - Binary Search Trees II
$24.99 $18.99