Leetcode: Binary Tree Postorder Traversal - 再解

来源:互联网 发布:淘宝大图轮播尺寸 编辑:程序博客网 时间:2024/06/06 04:02

前几天做过,很混乱 http://blog.csdn.net/u013166464/article/details/17455723。

跟前序,中序一块考虑,简单些的解法:

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ #include <stack> #include <vector> class Solution {public:    vector<int> postorderTraversal(TreeNode *root) {        vector<int> result;        stack<TreeNode*> stack_tree;        TreeNode *prev = NULL;        while (root != NULL || !stack_tree.empty()) {            while (root != NULL) {                stack_tree.push(root);                root = root->left;            }            if (!stack_tree.empty()) {                root = stack_tree.top();                if (root->right == NULL || root->right == prev) {                    result.push_back(root->val);                    prev = root;                    root = NULL;                    stack_tree.pop();                }                else {                    root = root->right;                }            }        }                return result;    }};

=========================第二次============================

标准解法。非递归很重要,不少面试题的变种。

/** * 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> result;        stack<TreeNode*> nodes;        TreeNode *prev = NULL;        while (root != NULL || !nodes.empty()) {            while (root != NULL) {                nodes.push(root);                root = root->left;            }                        if (!nodes.empty()) {                root = nodes.top();                if (root->right == NULL || root->right == prev) {                    result.push_back(root->val);                    nodes.pop();                    prev = root;                    root = NULL;                }                else {                    root = root->right;                }            }        }                return result;    }};


0 0