I am implementing a binary tree in C++, and I am supposed to write inOrder, preOrder, postOrder etc.
I write the public functions for inOrder, postOrder, and preOrder as followed:
My code:
and the private functions as
It is not liking that I am passing root, and the function pointer order in my public version. My driver(main) program where it initiates it is right here:
where x = first(the object after elements are inserted in it
y = .inOrder/.postOrder/.preOrder
s = "first" (string to tell the user what is what)
t = "inorder/postorder/preorder" (string to tell user what is what)
As I mentioned, I get errors in the public function if inOrder(so far) where I pass root and order(right now, I am passing (root, inOrder) but have tried (root, order) as well... and I am unsure why. I have more info to give if needed, but I believe this is what one might need.
My current error is:
Segmentation fault
Code:
template <class T> class binTree {
public:
binTree ( ); // default constructor
bool empty ( ) const; // checks if tree empty
int size ( ) const; // returns no of nodes
int height ( ) const; // returns height of tree
virtual void insert ( const T& ); // inserts a node in shortest subtree
void inOrder ( void ( * ) ( T& )); // inorder traversal of tree
void preOrder ( void ( * ) ( T& )); // preorder traversal of tree
void postOrder ( void ( * ) ( T& )); // postorder traversal of tree
protected:
binTreeNode <T>* root; // root of tree
private:
int size ( binTreeNode <T>* ) const; // private version of size
int height ( binTreeNode <T>* ) const; // private version of height
void insert ( binTreeNode <T>*&, const T& ); // private version of insert
void inOrder ( binTreeNode <T>*, void ( * ) ( T& )); // private version of inOrder
void preOrder ( binTreeNode <T>*, void ( * ) ( T& )); // private version of preOrder
void postOrder ( binTreeNode <T>*, void ( * ) ( T& )); // private version of postOrder
};
Code:
2
template <class T> class binTree;
template <class T> class binTreeNode {
friend class binTree <T>;
public:
// default constructor
binTreeNode ( const T& =T ( ), binTreeNode <T>* = 0, binTreeNode <T>* = 0 );
private:
T data; // data value in node
binTreeNode <T> *left, *right; // links to other nodes
};
I write the public functions for inOrder, postOrder, and preOrder as followed:
My code:
Code:
template <class T> void binTree<T>::inOrder ( void ( *order ) ( T& ))
{
inOrder(root, order);
}
template <class T> void binTree<T>::preOrder ( void ( *order ) ( T& ))
{
preOrder(root, order);
}
template <class T> void binTree<T>::postOrder ( void ( *order ) ( T& ))
{
postOrder(root, order);
}
and the private functions as
Code:
//********************
//*****preOrder*******
//********************
template <class T> void binTree<T>::preOrder (binTreeNode <T>* node1, void (*order) (T&))
{//begin preOrder
if (node1 != NULL)
{//begin if
order(node1->data);
order(node1->left); //prints left subtree
order(node1->right); //prints right subtree
}//end if
}//end preOrder
//*********************
//*****postOrder*******
//*********************
template <class T> void binTree<T>::postOrder (binTreeNode <T>* node1, void (*order) (T&))
{//begin postOrder
cout << "h" << endl;
if (node1 != NULL)
{//begin if
order(node1->left); //prints left subtree
order(node1->right); //prints right subtree
order(node1->data);
}//end if
}//end postOrder
//**********************
//*****inOrder**********
//**********************
template <class T> void binTree<T>::inOrder (binTreeNode <T>* node1, void (*order) (T&))
{//begin inOrder
cout << "Heyoooo" << endl;
if (node1 != NULL)
{//begin if
order(node1->left);
order(node1->data);
order(node1->right);
}//end if
}//end inOrder
It is not liking that I am passing root, and the function pointer order in my public version. My driver(main) program where it initiates it is right here:
Code:
#define ORD( x, y, s, t )\
cout << "The elements of '" << s << "' in " << t << ":\n\t";\
x.y ( print_val ); cout << endl
template <class T>
void print_val ( T& x ) { cout << x << ' '; }
where x = first(the object after elements are inserted in it
y = .inOrder/.postOrder/.preOrder
s = "first" (string to tell the user what is what)
t = "inorder/postorder/preorder" (string to tell user what is what)
As I mentioned, I get errors in the public function if inOrder(so far) where I pass root and order(right now, I am passing (root, inOrder) but have tried (root, order) as well... and I am unsure why. I have more info to give if needed, but I believe this is what one might need.
My current error is:
Segmentation fault
Last edited: