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]
.
思路:后序遍历是按照“左子树,右子树,根”的顺序访问元素。那么根或者其它父亲元素就要先压入栈,然后再弹出。
#include <iostream> #include <algorithm> #include <vector> #include <stack> using namespace std; 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> res; stack<TreeNode *> s; if (!root) { return res; } s.push(root); while (!s.empty()) { TreeNode *p = s.top(); s.pop(); res.push_back(p->val); if (p->right) { s.push(p->right); } if (p->left) { s.push(p->left); } } reverse(res.begin(), res.end()); return res; } }; int main(int argc, char *argv[]) { TreeNode *p = new TreeNode(9); p->right = new TreeNode(1); p->left = new TreeNode(1); Solution *solution = new Solution(); vector<int> res; res = solution->postorderTraversal(p); vector<int>::iterator it; for (it = res.begin(); it != res.end(); it++) { cout << *it << endl; } }