PR 5 B-7
PR 5 B-7
return 0;
struct node }
char data; {
node *right; }
}; node *pop()
class tree {
{ return (data[top--]);
char prefix[20]; }
};
node *top; {
}; len = strlen(prefix);
{ {
top->right = NULL;
public: if (isalpha(prefix[i]))
stack1() {
{ top->data = prefix[i];
} }
int empty()
else if (prefix[i] == '+' || prefix[i] == '*' || prefix[i] s2.push(T);
== '-' || prefix[i] == '/')
if (T->left != NULL)
{
s1.push(T->left);
t2 = s.pop();
if (T->right != NULL)
t1 = s.pop();
s1.push(T->right);
top->data = prefix[i];
}
top->left = t2;
while (!s2.empty())
top->right = t1;
{
s.push(top);
top = s2.pop();
}
cout << top->data;
}
}
top = s.pop();
}
}
void tree::del(node *node)
void tree::display(node *root)
{
{
if (node == NULL)
if (root != NULL)
return;
{
/* first delete both subtrees */
cout << root->data;
del(node->left);
display(root->left);
del(node->right);
display(root->right);
/* then delete the node */
}
cout <<endl<<"Deleting node : " << node-
} >data<<endl;
{ }
stack1 s1, s2; /*stack s1 is being used for flag . A NULL int main()
data implies that the right subtree has not been visited
{
*/
char expr[20];
node *T = top;
tree t;
cout << "\n";
s1.push(T);
cout <<"Enter prefix Expression : ";
while (!s1.empty())
cin >> expr;
{
cout << expr;
T = s1.pop();
cout <<"Postfix Expression : "; t.non_rec_postorder(t.top);
t.expression(expr); t.del(t.top);
//t.display(t.top); // t.display(t.top);
//cout<<endl; }