예제 #1
0
BinaryNode<ItemType>* BinaryNodeTree<ItemType>::moveValuesUpTree(BinaryNode<ItemType>* subTreePtr)
{
   BinaryNode<ItemType>* leftPtr = subTreePtr->getLeftChildPtr();
   BinaryNode<ItemType>* rightPtr = subTreePtr->getRightChildPtr();
   int leftHeight = getHeightHelper(leftPtr);
   int rightHeight = getHeightHelper(rightPtr);
   if (leftHeight > rightHeight)
   {
      subTreePtr->setItem(leftPtr->getItem());
      leftPtr = moveValuesUpTree(leftPtr);
      subTreePtr->setLeftChildPtr(leftPtr);
      return subTreePtr;
   }
   else 
   {
      if (rightPtr != nullptr)
      {
         subTreePtr->setItem(rightPtr->getItem());
         rightPtr =moveValuesUpTree(rightPtr);         
         subTreePtr->setRightChildPtr(rightPtr);
         return subTreePtr;
      }
      else 
      {
         //this was a leaf!
         // value not important
         delete subTreePtr;
         return nullptr;
      }  // end if
   }  // end if   
}  // end moveValuesUpTree
예제 #2
0
ItemType BinaryNodeTree<ItemType>::getEntry(const ItemType& anEntry) const throw(NotFoundException)
{
   bool isSuccessful = false;
   BinaryNode<ItemType>* binaryNodePtr = findNode(rootPtr, anEntry, isSuccessful);
   
   if (isSuccessful)
      return binaryNodePtr->getItem(); 
   else 
      throw NotFoundException("Entry not found in tree!");
}  // end getEntry
 BinaryNode<ItemType>* moveValuesUpTree(BinaryNode<ItemType>* subTreePtr) {
     BinaryNode<ItemType>* leftPtr = subTreePtr->getLeftChildPtr();
     BinaryNode<ItemType>* rightPtr = subTreePtr->getRightChildPtr();
     int leftHeight = getHeightHelper(leftPtr);
     int rightHeight = getHeightHelper(rightPtr);
     if (leftHeight > rightHeight) {
         subTreePtr->setItem(leftPtr->getItem());
         leftPtr = moveValuesUpTree(leftPtr);
         subTreePtr->setLeftChildPtr(leftPtr);
         return subTreePtr;
     }
     else {
         if (rightPtr != nullptr) {
             subTreePtr->setItem(rightPtr->getItem());
             rightPtr =moveValuesUpTree(rightPtr);
             subTreePtr->setRightChildPtr(rightPtr);
             return subTreePtr;
         }
         else {
             delete subTreePtr;
             return nullptr;
         }
     }
 }
     ItemType getEntry(const ItemType& anEntry) const {
     BinaryNode<ItemType>* nodeWithEntry = findNode(rootPtr, anEntry);
     if (nodeWithEntry == nullptr) cout << "NotFoundException - Entry not found in tree.\n";
     else return nodeWithEntry->getItem();
 }
 ItemType getRootData() const {
     if (isEmpty()) cout << "PrecondViolatedExcep - getRootData() called with empty tree.\n";
     return rootPtr->getItem();
 }
 ItemType getEntry(const ItemType& anEntry) const {
     bool isSuccessful = false;
     BinaryNode<ItemType>* binaryNodePtr = findNode(rootPtr, anEntry, isSuccessful);
     if (isSuccessful) return binaryNodePtr->getItem();
     else cout << "NotFoundException - Entry not found in tree!\n";
 }