/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> postorderTraversal(TreeNode *root) { vector<int> path; vector<TreeNode*> stack; if (root != NULL) { stack.push_back(root); } TreeNode* last = NULL; while(!stack.empty()) { TreeNode* cur = stack.back(); if (cur->left == NULL && cur->right == NULL) { path.push_back(cur->val); stack.pop_back(); last = cur; continue; } if (last != NULL && (cur->left == last || cur->right == last)) { path.push_back(cur->val); stack.pop_back(); last = cur; continue; } while (cur != NULL) { if (cur->right != NULL) stack.push_back(cur->right); if (cur->left != NULL) stack.push_back(cur->left); cur = cur->left; } } return path; } };
Note: Recursive solution is trivial, could you do it iteratively? 那就写个非递归的呗!
LeetCode Binary Tree Postorder Traversal,布布扣,bubuko.com
LeetCode Binary Tree Postorder Traversal
原文:http://www.cnblogs.com/lailailai/p/3610439.html