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