首页 > 代码库 > leetcode - [6]Binary Tree Postorder Traversal

leetcode - [6]Binary Tree Postorder Traversal

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;    }}

 

leetcode - [6]Binary Tree Postorder Traversal