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
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"; }