GATE CSE
First time here? Checkout the FAQ!
x
0 votes
113 views

If we have to construct the expression tree from this expression (3 + ((5+9)*2)) then what will be the order of push and pop operation on a stack ?Explain what to do with each operator and operand along the way of push and pop operation

asked in DS by Veteran (40.9k points)   | 113 views
to make expression tree first of all we need to convert infix expression to postfix expression.

For above infix - (3 + ((5 + 9 ) * 2 ) )

               postfix - 3 5 9 + 2 * +

now after getting postfix expression do following operation -

1. traverse postfix expression from start '3' to the last '+' operator/operand.

2. If it is operand than make a new node and make its data part to the operand and make its both child points to null and push the node into the stack.

3. if it is operator then first of all make new node and make its data part to the incoming operator and do two pop operation and make first popped node right child of the new node and second popped node to the left child of the new node and finally push the new node(containing operator as data part of node) into the stack.
I'm not getting can be explain more..what is meaning of order and why we need to convert first into postfix
@vijay i did as you said initially 3 5 9 has been pushed onto the stack after that i encountered first operator for that i made  2 node first for 9 which will be right node and second for 5 as left node and i made "+" as parent of both

now next we got 2 which i operand i pushed it on to the stack  at this point we have 3 and 2 in stack now again we got  * a operator now problem is for this operator should i pop both 3 and 2 and make then node and parent as * or should i pop only 2 .

if both then what will be the position of both in expression tree and if one then why only one ?
@chauhan check once how they created tree. https://en.wikipedia.org/wiki/Binary_expression_tree
@Tauhin Thanks this link has cleared mu doubt ...i was looking at a different website that has not explained it so well.
@sekhar .. I had forgotten one more thing to mention there in 3rd step -- after making left and right child .. now we need to push that node(parent node) containing operator as data part of node into the stack.

its okay i got it .yes

Is it any rule that first poped node become right child of new node and second popped node become left child of new node.

I think it depend upon the the operater associativity who cause two pop from stack.

If incomming operator is left associativity then first poped node become right child of new node and second popped node become left child of new node.

If incomming operator is right associativity then first poped node become left child of new node and second popped node become right child of new node.

let me know am i correct?

1 Answer

+2 votes

this is basic idea, if we want to implement it we can modify accordingly

answered by Active (2.1k points)  
Top Users Feb 2017
  1. Arjun

    5396 Points

  2. Bikram

    4230 Points

  3. Habibkhan

    3952 Points

  4. Aboveallplayer

    3086 Points

  5. Debashish Deka

    2564 Points

  6. sriv_shubham

    2318 Points

  7. Smriti012

    2240 Points

  8. Arnabi

    2008 Points

  9. mcjoshi

    1696 Points

  10. sh!va

    1684 Points

Monthly Topper: Rs. 500 gift card

20,863 questions
26,023 answers
59,698 comments
22,136 users