Source of add.cpp


  1: //  Created by Frank M. Carrano and Timothy M. Henry.
  2: //  Copyright (c) 2017 Pearson Education, Hoboken, New Jersey.

  4: template<class ItemType>
  5: bool BinaryNodeTree<ItemType>::add(const ItemType& newData)
  6: {
  7:    auto newNodePtr = std::make_shared<BinaryNode<ItemType>>(newData);
  8:    rootPtr = balancedAdd(rootPtr, newNodePtr);
  9:    
 10:    return true;
 11: }  // end add

 13: template<class ItemType>
 14: auto BinaryNodeTree<ItemType>::
 15:      balancedAdd(std::shared_ptr<BinaryNode<ItemType>> subTreePtr,
 16:                  std::shared_ptr<BinaryNode<ItemType>> newNodePtr)
 17: {
 18:    if (subTreePtr == nullptr)
 19:       return newNodePtr;
 20:    else
 21:    {
 22:       auto leftPtr = subTreePtr–>getLeftChildPtr();
 23:       auto rightPtr = subTreePtr–>getRightChildPtr();
 24:       
 25:       if (getHeightHelper(leftPtr) > getHeightHelper(rightPtr))
 26:       {
 27:          rightPtr = balancedAdd(rightPtr, newNodePtr);
 28:          subTreePtr–>setRightChildPtr(rightPtr);
 29:       }
 30:       else
 31:       {
 32:          leftPtr = balancedAdd(leftPtr, newNodePtr);
 33:          subTreePtr–>setLeftChildPtr(leftPtr);
 34:       }  // end if
 35:       
 36:       return subTreePtr;
 37:    }  // end if
 38: }  // end balancedAdd