ExtendedAVLNode's constructor and getSubtreeKeyCount() member function are already implemented and should not be changed. Additional member functions are needed to ensure that subtreeKeyCount remains accurate. Step 4: Implement ExtendedAVLTree and ExtendedAVLNode Each node in an ExtendedAVLTree must have a correct subtreeKeyCount after an insertion or removal operation. Determine which member functions in AVLTree and AVLNode must be overridden in ExtendedAVLTree and Extended AVLNode to keep each node's subtreeKeyCount correct. New functions can be added along with overridden functions, if desired. Hint: Consider an UpdateSubtree KeyCount() member function for the ExtendedAVLNode class. The function requires each child node's subtreeKeyCount to be correct, and updates the node's subtreeKeyCount appropriately. Overridden functions in both ExtendedAVLNode and ExtendedAVLTree can call a node's UpdateSubtreeKeyCount() function as needed. Once determinations are made, complete the implementation of both the ExtendedAVLTree and ExtendedAVLNode classes. Do not implement ExtendedAVLTree's GetNthKey() in this step. GetNthKey() requires correct subtree counts at each node. Step 5: Run tests Tree TestCommand is an abstract base class defined in TreeCommands.h. A TreeTestCommand object is an executable command that operates on a binary search tree. Classes inheriting from TreeTestCommand are also declared in TreeCommands.h: • TreeInsertCommand inserts keys into the tree TreeRemoveCommand removes keys from the tree TreeVerifyKeysCommand verifies the tree's keys using an inorder traversal TreeVerifySubtreeCounts Command verifies that each node in the tree has the expected subtree key count TreeGetNthCommand verifies that GetNthKey() returns an expected value Code in main.cpp contains three automated test cases. Each test executes a vector of TreeTestCommand objects in sequence. The third test includes TreeGetNthCommands and will not pass until the completion of Step 6. The first two tests should pass after completion of step 4. Before proceeding to Step 6, verify that the first two tests in main.cpp pass. Then submit code and ensure that the first two unit tests pass. Step 6: Implement ExtendedAVLTree's GetNthKey() member function GetNthKey() must return the tree's nth-largest key. The parameter n starts at 0 for the smallest key in the tree. Ex: Suppose a tree has keys: 10, 19, 20, 30, 42, 55, 77. Then GetNthKey(0) returns 10, GetNthKey (1) returns 19, ..., GetNthKey (5) returns 55, and GetNthKey(6) returns 77. Implement an algorithm that uses the subtree key counts so that GetNthKey() operates in worst case O(log N) time. Go Files +01 ▷ Run History Tutorial Step 1: Inspect the BSTNode.h and BinarySearchTree.h files Inspect the BSTNode class declaration for a binary search tree node in BSTNode.h. The BSTNode class has private member variables for the key, parent pointer, left child pointer, and right child pointer. Accessor functions exist for each. Inspect the Binary Search Tree class declaration for a binary search tree in BinarySearch Tree.h. The GetNthKey() function is the only pure virtual function that exists. Step 2: Inspect other files related to the inheritance hierarchy Classes AVLNode and AVLTree inherit from BSTNode and BinarySearch Tree, respectively. Each class is implemented in a read-only header file. Classes ExtendedAVLNode and Extended AVLTree are declared, but implementations are incomplete. Both classes must be implemented in this lab. BinarySearch Tree BSTNode AVLTree ExtendedAVLTree AVLNode ExtendedAVLNode Read-only, completed class implementation Incomplete class implementation Step 3: Understand the purpose of the subtreeKeyCount member variable The ExtendedAVLNode class inherits from AVLNode and adds one integer member variable, subtreeKeyCount. Each node's subtree key count is the number of keys in the subtree rooted at that node. Ex: 20 7 Subtree key count

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question
#ifndef EXTENDEDAVLNODE_H
#define EXTENDEDAVLNODE_H

#include "AVLNode.h"
#include <iostream>

class ExtendedAVLNode : public AVLNode {
private:
   int subtreeKeyCount;

public:
   ExtendedAVLNode(int nodeKey) : AVLNode(nodeKey) {
      subtreeKeyCount = 1;
      std::cout << "Node created with key: " << nodeKey << std::endl;
   }
   
   int GetSubtreeKeyCount() {
      return subtreeKeyCount;
   }
   
   void UpdateSubtreeKeyCount() {
      int leftCount = GetLeft() ? ((ExtendedAVLNode*)GetLeft())->GetSubtreeKeyCount() : 0;
      int rightCount = GetRight() ? ((ExtendedAVLNode*)GetRight())->GetSubtreeKeyCount() : 0;
      subtreeKeyCount = 1 + leftCount + rightCount;
      std::cout << "Updated subtreeKeyCount for node " << GetKey() << ": " << subtreeKeyCount << std::endl;
   }

   virtual void SetLeft(BSTNode* newLeftChild) override {
      std::cout << "Setting left child for node " << GetKey() << std::endl;
      AVLNode::SetLeft(newLeftChild);
      UpdateSubtreeKeyCount();
      std::cout << "Set left child for node " << GetKey() << std::endl;
   }

   virtual void SetRight(BSTNode* newRightChild) override {
      std::cout << "Setting right child for node " << GetKey() << std::endl;
      AVLNode::SetRight(newRightChild);
      UpdateSubtreeKeyCount();
      std::cout << "Set right child for node " << GetKey() << std::endl;
   }
};

#endif // EXTENDEDAVLNODE_
 
#ifndef EXTENDEDAVLTREE_H
#define EXTENDEDAVLTREE_H

#include "AVLTree.h"
#include "ExtendedAVLNode.h"
#include <iostream>

class ExtendedAVLTree : public AVLTree {
protected:
   virtual BSTNode* MakeNewNode(int key) override {
      std::cout << "Creating new node with key: " << key << std::endl;
      return new ExtendedAVLNode(key);
   }

   virtual void InsertNode(BSTNode* node) override {
      std::cout << "Inserting node with key: " << node->GetKey() << std::endl;
      AVLTree::InsertNode(node);
      UpdateSubtreeKeyCounts((ExtendedAVLNode*)node);
   }

   virtual bool RemoveNode(BSTNode* nodeToRemove) override {
      std::cout << "Removing node with key: " << nodeToRemove->GetKey() << std::endl;
      bool result = AVLTree::RemoveNode(nodeToRemove);
      if (result) {
         ExtendedAVLNode* parent = (ExtendedAVLNode*)nodeToRemove->GetParent();
         if (parent) {
            std::cout << "Updating subtree key counts starting from parent node with key: " << parent->GetKey() << std::endl;
            UpdateSubtreeKeyCounts(parent);
         } else {
            std::cout << "Removed node was the root." << std::endl;
         }
      }
      return result;
   }

   void UpdateSubtreeKeyCounts(ExtendedAVLNode* node) {
      while (node) {
         node->UpdateSubtreeKeyCount();
         node = (ExtendedAVLNode*)node->GetParent();
      }
   }

public:
   virtual int GetNthKey(int n) override {
      std::cout << "Getting the " << n << "th key" << std::endl;
      return GetNthKeyHelper((ExtendedAVLNode*)root, n);
   }

private:
   int GetNthKeyHelper(ExtendedAVLNode* node, int n) {
      if (!node) throw std::out_of_range("Index out of range");

      int leftCount = node->GetLeft() ? ((ExtendedAVLNode*)node->GetLeft())->GetSubtreeKeyCount() : 0;

      if (n < leftCount) {
         return GetNthKeyHelper((ExtendedAVLNode*)node->GetLeft(), n);
      } else if (n == leftCount) {
         return node->GetKey();
      } else {
         return GetNthKeyHelper((ExtendedAVLNode*)node->GetRight(), n - leftCount - 1);
      }
   }
};

#endif
ExtendedAVLNode's constructor and getSubtreeKeyCount() member function are already implemented and should not be changed.
Additional member functions are needed to ensure that subtreeKeyCount remains accurate.
Step 4: Implement ExtendedAVLTree and ExtendedAVLNode
Each node in an ExtendedAVLTree must have a correct subtreeKeyCount after an insertion or removal operation. Determine which
member functions in AVLTree and AVLNode must be overridden in ExtendedAVLTree and Extended AVLNode to keep each node's
subtreeKeyCount correct. New functions can be added along with overridden functions, if desired.
Hint: Consider an UpdateSubtree KeyCount() member function for the ExtendedAVLNode class. The function requires each child node's
subtreeKeyCount to be correct, and updates the node's subtreeKeyCount appropriately. Overridden functions in both ExtendedAVLNode
and ExtendedAVLTree can call a node's UpdateSubtreeKeyCount() function as needed.
Once determinations are made, complete the implementation of both the ExtendedAVLTree and ExtendedAVLNode classes. Do not
implement ExtendedAVLTree's GetNthKey() in this step. GetNthKey() requires correct subtree counts at each node.
Step 5: Run tests
Tree TestCommand is an abstract base class defined in TreeCommands.h. A TreeTestCommand object is an executable command that
operates on a binary search tree. Classes inheriting from TreeTestCommand are also declared in TreeCommands.h:
•
TreeInsertCommand inserts keys into the tree
TreeRemoveCommand removes keys from the tree
TreeVerifyKeysCommand verifies the tree's keys using an inorder traversal
TreeVerifySubtreeCounts Command verifies that each node in the tree has the expected subtree key count
TreeGetNthCommand verifies that GetNthKey() returns an expected value
Code in main.cpp contains three automated test cases. Each test executes a vector of TreeTestCommand objects in sequence. The
third test includes TreeGetNthCommands and will not pass until the completion of Step 6. The first two tests should pass after
completion of step 4.
Before proceeding to Step 6, verify that the first two tests in main.cpp pass. Then submit code and ensure that the first two unit tests
pass.
Step 6: Implement ExtendedAVLTree's GetNthKey() member function
GetNthKey() must return the tree's nth-largest key. The parameter n starts at 0 for the smallest key in the tree. Ex: Suppose a tree has
keys: 10, 19, 20, 30, 42, 55, 77. Then GetNthKey(0) returns 10, GetNthKey (1) returns 19, ..., GetNthKey (5) returns 55,
and GetNthKey(6) returns 77.
Implement an algorithm that uses the subtree key counts so that GetNthKey() operates in worst case O(log N) time.
Go Files
+01
▷ Run
History Tutorial
Transcribed Image Text:ExtendedAVLNode's constructor and getSubtreeKeyCount() member function are already implemented and should not be changed. Additional member functions are needed to ensure that subtreeKeyCount remains accurate. Step 4: Implement ExtendedAVLTree and ExtendedAVLNode Each node in an ExtendedAVLTree must have a correct subtreeKeyCount after an insertion or removal operation. Determine which member functions in AVLTree and AVLNode must be overridden in ExtendedAVLTree and Extended AVLNode to keep each node's subtreeKeyCount correct. New functions can be added along with overridden functions, if desired. Hint: Consider an UpdateSubtree KeyCount() member function for the ExtendedAVLNode class. The function requires each child node's subtreeKeyCount to be correct, and updates the node's subtreeKeyCount appropriately. Overridden functions in both ExtendedAVLNode and ExtendedAVLTree can call a node's UpdateSubtreeKeyCount() function as needed. Once determinations are made, complete the implementation of both the ExtendedAVLTree and ExtendedAVLNode classes. Do not implement ExtendedAVLTree's GetNthKey() in this step. GetNthKey() requires correct subtree counts at each node. Step 5: Run tests Tree TestCommand is an abstract base class defined in TreeCommands.h. A TreeTestCommand object is an executable command that operates on a binary search tree. Classes inheriting from TreeTestCommand are also declared in TreeCommands.h: • TreeInsertCommand inserts keys into the tree TreeRemoveCommand removes keys from the tree TreeVerifyKeysCommand verifies the tree's keys using an inorder traversal TreeVerifySubtreeCounts Command verifies that each node in the tree has the expected subtree key count TreeGetNthCommand verifies that GetNthKey() returns an expected value Code in main.cpp contains three automated test cases. Each test executes a vector of TreeTestCommand objects in sequence. The third test includes TreeGetNthCommands and will not pass until the completion of Step 6. The first two tests should pass after completion of step 4. Before proceeding to Step 6, verify that the first two tests in main.cpp pass. Then submit code and ensure that the first two unit tests pass. Step 6: Implement ExtendedAVLTree's GetNthKey() member function GetNthKey() must return the tree's nth-largest key. The parameter n starts at 0 for the smallest key in the tree. Ex: Suppose a tree has keys: 10, 19, 20, 30, 42, 55, 77. Then GetNthKey(0) returns 10, GetNthKey (1) returns 19, ..., GetNthKey (5) returns 55, and GetNthKey(6) returns 77. Implement an algorithm that uses the subtree key counts so that GetNthKey() operates in worst case O(log N) time. Go Files +01 ▷ Run History Tutorial
Step 1: Inspect the BSTNode.h and BinarySearchTree.h files
Inspect the BSTNode class declaration for a binary search tree node in BSTNode.h. The BSTNode class has private member variables
for the key, parent pointer, left child pointer, and right child pointer. Accessor functions exist for each.
Inspect the Binary Search Tree class declaration for a binary search tree in BinarySearch Tree.h. The GetNthKey() function is the only pure
virtual function that exists.
Step 2: Inspect other files related to the inheritance hierarchy
Classes AVLNode and AVLTree inherit from BSTNode and BinarySearch Tree, respectively. Each class is implemented in a read-only
header file.
Classes ExtendedAVLNode and Extended AVLTree are declared, but implementations are incomplete. Both classes must be
implemented in this lab.
BinarySearch Tree
BSTNode
AVLTree
ExtendedAVLTree
AVLNode
ExtendedAVLNode
Read-only, completed class implementation
Incomplete class implementation
Step 3: Understand the purpose of the subtreeKeyCount member variable
The ExtendedAVLNode class inherits from AVLNode and adds one integer member variable, subtreeKeyCount. Each node's subtree key
count is the number of keys in the subtree rooted at that node. Ex:
20
7
Subtree key count
Transcribed Image Text:Step 1: Inspect the BSTNode.h and BinarySearchTree.h files Inspect the BSTNode class declaration for a binary search tree node in BSTNode.h. The BSTNode class has private member variables for the key, parent pointer, left child pointer, and right child pointer. Accessor functions exist for each. Inspect the Binary Search Tree class declaration for a binary search tree in BinarySearch Tree.h. The GetNthKey() function is the only pure virtual function that exists. Step 2: Inspect other files related to the inheritance hierarchy Classes AVLNode and AVLTree inherit from BSTNode and BinarySearch Tree, respectively. Each class is implemented in a read-only header file. Classes ExtendedAVLNode and Extended AVLTree are declared, but implementations are incomplete. Both classes must be implemented in this lab. BinarySearch Tree BSTNode AVLTree ExtendedAVLTree AVLNode ExtendedAVLNode Read-only, completed class implementation Incomplete class implementation Step 3: Understand the purpose of the subtreeKeyCount member variable The ExtendedAVLNode class inherits from AVLNode and adds one integer member variable, subtreeKeyCount. Each node's subtree key count is the number of keys in the subtree rooted at that node. Ex: 20 7 Subtree key count
Expert Solution
steps

Step by step

Solved in 2 steps

Blurred answer
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education