SOURCE FILE: BT.h
// ********************************************************
// Header file BT.h for the ADT binary tree.
/* This is the code that came with the 2nd edition of Carrano. So far, it
has been tested with the g++ compiler on the CS Department Suns, but not
the ng++ compiler. */
// ********************************************************
typedef desired-type-of-tree-item treeItemType;
typedef void (*functionType)(treeItemType& AnItem);
struct treeNode; // defined in implementation file
typedef treeNode* ptrType; // pointer to node
class binTreeClass
{
public:
// constructors and destructor:
binTreeClass();
binTreeClass(const treeItemType& RootItem);
binTreeClass(const treeItemType& RootItem,
const binTreeClass& LeftTree,
const binTreeClass& RightTree);
binTreeClass(const binTreeClass& Tree);
virtual ~binTreeClass();
// binary tree operations:
virtual bool BinaryTreeIsEmpty() const;
virtual treeItemType RootData() const;
virtual void SetRootData(const treeItemType& NewItem);
virtual void AttachLeft(const treeItemType& NewItem,
bool& Success);
virtual void AttachRight(const treeItemType& NewItem,
bool& Success);
virtual void AttachLeftSubtree(const binTreeClass& LeftTree, bool& Success);
virtual void AttachRightSubtree(const binTreeClass& RightTree, bool&
Success);
virtual void DetachLeftSubtree(binTreeClass& LeftTree,
bool& Success);
virtual void DetachRightSubtree(binTreeClass& RightTree,
bool& Success);
virtual binTreeClass LeftSubtree() const;
virtual binTreeClass RightSubtree() const;
virtual void PreorderTraverse(functionType Visit);
virtual void InorderTraverse(functionType Visit);
virtual void PostorderTraverse(functionType Visit);
// overloaded operator:
virtual binTreeClass& operator=(const binTreeClass& Rhs);
protected:
binTreeClass(ptrType NodePtr); // constructor
void CopyTree(ptrType TreePtr,
ptrType& NewTreePtr) const;
// Copies the tree rooted at TreePtr into a tree rooted
// at NewTreePtr.
void DestroyTree(ptrType& TreePtr);
// Deallocates memory for a tree.
// The next two functions retrieve and set the value
// of the private data member Root.
ptrType RootPtr() const;
void SetRootPtr(ptrType NewRoot);
// The next two functions retrieve and set the values
// of the left and right child pointers of a tree node.
void GetChildPtrs(ptrType NodePtr, ptrType& LChildPtr,
ptrType& RChildPtr) const;
void SetChildPtrs(ptrType NodePtr, ptrType LChildPtr,
ptrType RChildPtr);
void Preorder(ptrType TreePtr, functionType Visit);
void Inorder(ptrType TreePtr, functionType Visit);
void Postorder(ptrType TreePtr, functionType Visit);
private:
ptrType Root; // pointer to root of tree
}; // end class
// End of header file.