SORRY I TRIED TO INDENT THE CODE BUT IT DIDNT WORK OUT
I am trying to make a binary tree for conversion of postfix to infix. the binary trees class is as follows
WHAT I HAVE TO DO AND WHAT I AN HAVING TROUBLE WITH
1) READ A POSTFIX EXPRESSION FROM A FILE AND MAKE A TREE. I HAVE TO DO THAT BY THE STACK METHOD.
Here is my binary tree class and questions i have:
#ifndef TREENODE_H
#define TREENODE_H
#include"stack.h"
#include<iostream>
#include<fstream>
using namespace std;
template<class type>
class binaryTree
{
struct treeNode {
type data;
binaryTree<type> *left;
binaryTree<type> *right;
};
treeNode * root;
void inOrder(treeNode *tnode);
void preOrder(treeNode *tnode);
void postOrder(treeNode *tnode);
void destroy(treeNode *&tnode);
public:
binaryTree();
binaryTree(type data);
binaryTree(type data, binaryTree<type> , binaryTree<type>);
bool isEmpty() const;
void inOrder();
void postOrder();
void preOrder();
void destroy();
~binaryTree();
};
template<class type>
binaryTree<type>::binaryTree()
{
root = NULL;
}
template<class type>
binaryTree<type>::binaryTree(type data)
{
root = new treeNode;
root->data = data;
root->left = NULL;
root->right = NULL;
}
template<class type>
binaryTree<type>::binaryTree(type data, binaryTree<type> leftSub, binaryTree<type> rightSub)
{
root = new treeNode;
root->data=data;
root->left=&leftSub;
root->right=&rightSub;
}
template<class type>
bool binaryTree<type>::isEmpty() const
{
return (root==NULL);
}
template<class type>
void binaryTree<type>::inOrder()
{
inOrder(root);
}
template<class type>
void binaryTree<type>::preOrder()
{
preOrder(root);
}
template<class type>
void binaryTree<type>::postOrder()
{
postOrder(root);
}
template<class type>
void binaryTree<type>::inOrder(treeNode *tnode)
{
if(tnode==NULL)
return;
if(tnode->left!=NULL)
inOrder(tnode->left->root);
cout << tnode->data << " ";
if(tnode->right!=NULL)
inOrder(tnode->right->root);
}
template<class type>
void binaryTree<type>::preOrder(treeNode* tnode)
{
if(tnode == NULL)
return;
cout << tnode->data << " ";
if(tnode->left!=NULL)
preOrder(tnode->left->root);
if(tnode->right!=NULL)
preOrder(tnode->right->root);
}
template<class type>
void binaryTree<type>::postOrder(treeNode* tnode)
{
if(tnode == NULL)
return;
if(tnode->left!=NULL)
postOrder(tnode->left->root);
if(tnode->right!=NULL)
postOrder(tnode->right->root);
cout << tnode->data << " ";
}
template<class type>
void binaryTree<type>::destroy()
{
destroy(root);
}
template<class type>
void binaryTree<type>::destroy(treeNode*& tnode)
{
if(tnode == NULL)
return;
if(tnode->left!=NULL)
destroy(tnode->left->root);
if(tnode->right!=NULL)
destroy(tnode->right->root);
delete tnode;
tnode = NULL;
}
template<class type>
binaryTree<type>::~binaryTree()
{
destroy(root);
}
what my problems are now:
1) my destructor and destroy() are still giving problems..
2)inorder and everything else works but for some cases they do not. i think they are the destructor dependent though. they seem to be working when i don't use the destructor and the destroy function. example: something like this always works when i comment out the destructor and destroy..
binaryTree<char> a('a');
binaryTree<char> b('b');
binaryTree<char> c('+',a,b);
binaryTree<char> d('+',b,c);
binaryTree<char> e('*',a,d);
binaryTree<char> f('z',final,d);
f.inOrder();
but when i destroy a tree object and use it later in order seems to give problems.
3)my final question and most important.. how do i store the popped tree in another tree object. for example :
stack<binaryTree> s; // consider the stack has some objects
binaryTree tree;
tree=s.pop() gives a malloc error and run time error.
Please someone i really need help...