题目:
解法:
方法一:递归实现
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> postorderTraversal(TreeNode* root) 13 { 14 vector<int> ret; 15 if (NULL == root) 16 { 17 return ret; 18 } 19 20 postorderTraversalHelper(root, ret); 21 22 return ret; 23 } 24 25 void postorderTraversalHelper(TreeNode *root, vector<int> &ret) 26 { 27 if (NULL != root) 28 { 29 postorderTraversalHelper(root->left, ret); 30 postorderTraversalHelper(root->right, ret); 31 ret.push_back(root->val); 32 } 33 } 34 };
方法二:迭代实现
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> postorderTraversal(TreeNode* root) 13 { 14 vector<int> ret; 15 if (NULL == root) 16 { 17 return ret; 18 } 19 20 stack<TreeNode *> st; 21 st.push(root); 22 23 while (!st.empty()) 24 { 25 TreeNode *tmp = st.top(); 26 st.pop(); 27 ret.insert(ret.begin(), tmp->val); 28 29 if (tmp->left) 30 { 31 st.push(tmp->left); 32 } 33 34 if (tmp->right) 35 { 36 st.push(tmp->right); 37 } 38 } 39 40 return ret; 41 } 42 };