Given a binary tree, return the postorder traversal of its nodes ' values.
For example:
Given binary Tree {1,#,2,3}
,
1 2 / 3
Return [3,2,1]
.
Note: Recursive solution is trivial, could do it iteratively?
classSolution { Public: Vector<int> Postordertraversal (TreeNode *root) {Vector<int>result; if(!root)returnresult; Stack<MyNode*>Treestack; Mynode* Myroot =NewMynode (root); Mynode* Current, *NewNode; Treestack.push (Myroot); while(!Treestack.empty ()) { Current=Treestack.top (); Treestack.pop (); if(!current->flag) { Current->flag =true; Treestack.push (current); if(current->node->Right ) {NewNode=NewMynode (current->node->Right ); Treestack.push (NewNode); } if(current->node->Left ) {NewNode=NewMynode (current->node->Left ); Treestack.push (NewNode); } } Else{result.push_back ( current->node->val); } } returnresult; } structMynode {TreeNode*node; BOOLFlag//indicate if the node has been visitedMynode (treenode* x): Node (x), Flag (false) {} };};
145. Binary Tree Postorder Traversal (Stack, tree)