class TreeNode { public: Object obj; TreeNode *leftChild; TreeNode *rightChild; private: Object getObject() { return obj; } TreeNode* getleftChild() { return leftChild; } TreeNode* getRightChild() { return rightChild; } } class Tree { private: TreeNode *root; public: TreeNode* getRoot() {return root}; void inOrderPrint() {inOrderPrint(root)}; void inOrderPrint(TreeNode *toPrint) { TreeNode *left = toPrint->getLeftChild(); TreeNode *right = toPrint->getRightChild(); if(left != null) inOrderPrint(left); toPrint->getObject().print(); if(right != null) inOrderPrint(right); } }; ... Tree *t = ...; //insertions t->inOrderPrint(); //OR t->inOrderPrint(t->getRoot());