Given a binary tree, return the postorder traversal of its nodes ' values.
For example:
Given binary Tree {1,#,2,3},
return [3,2,1].
Note:recursive solution is trivial, could do it iteratively?
Recursive implementation code
/***************************************************************** * @Author: Chu hing * @Date: 2015/2/24 01 : * @Status: Accepted * @Runtime: 4 ms******************************************************************/
structtreenode{intVal TreeNode *left; TreeNode *right; TreeNode (intx): Val (x), left (null), right (null) {}};classSolution { Public:voidHelper (TreeNode *root, vector<int>&result) {if(Root) {Helper (root->left, result); Helper (root->right, result); Result.push_back (Root->val); } } vector<int>Postordertraversal (TreeNode *root) { vector<int>Result Helper (root, result);returnResult }};
Non-recursive implementation code 1
classSolution { Public: vector<int>Postordertraversal (TreeNode *root) { vector<int>Resultif(Root = NULL) {returnResult } list<TreeNode*>Nodes TreeNode *p = root; TreeNode *cur; Nodes.push_back (P); while(!nodes.empty ()) {cur = Nodes.front ();//① The current node is not a leaf node, but the child has traversed it. //② The current node is the leaf node. if(cur->right = = P | | cur->left = = P | | (Cur->left = = NULL && Cur->right = = null)) {Result.push_back (cur->val); Nodes.pop_front (); p = cur; }Else{if(Cur->right! = NULL) {Nodes.push_front (cur->right); }if(Cur->left! = NULL) {Nodes.push_front (cur->left); } } }returnResult }};
Non-recursive implementation code 2
classSolution { Public: vector<int>Postordertraversal (TreeNode *root) { vector<int>Result Stack<TreeNode*>Nodes TreeNode *p = NULL; TreeNode *cur = root; while(cur! = NULL | |!nodes.empty ()) {if(cur! = NULL) { while(cur! = NULL) {Nodes.push (cur); Cur = cur->left; } }Else{cur = nodes.top ();if(cur->right = = NULL | | cur->right = = p) {Nodes.pop (); p = cur; Result.push_back (Cur->val); cur = NULL; }Else{cur = cur->right; } } }returnResult }};
Implementation of the first order traversal see blog binary Tree preorder traversal
[Leetcode] Binary Tree postorder Traversal