LintCode 二叉树的遍历 (非递归)

来源:互联网 发布:淘宝靠谱的数码店 编辑:程序博客网 时间:2024/06/05 20:41

前序:

class Solution {public:    /**     * @param root: The root of binary tree.     * @return: Preorder in vector which contains node values.     */    vector<int> preorderTraversal(TreeNode *root) {        // write your code here        stack<TreeNode*> s;        vector<int> res;        while (root!= nullptr || !s.empty()) {            while (root != nullptr) {                res.push_back(root->val);                s.push(root);                root = root->left;            }            if (!s.empty()) {                root = s.top();                s.pop();                root = root->right;            }        }        return res;    }};

中序:

class Solution {    /**     * @param root: The root of binary tree.     * @return: Inorder in vector which contains node values.     */public:    vector<int> inorderTraversal(TreeNode *root) {        // write your code here        stack<TreeNode *> s;        vector<int> res;        while (root!=nullptr || !s.empty()) {            while (root != nullptr){                s.push(root);                root = root->left;            }            if (!s.empty()) {                root = s.top();                res.push_back(root->val);                s.pop();                root = root ->right;            }        }        return res;    }};



后续:

/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {    /**     * @param root: The root of binary tree.     * @return: Postorder in vector which contains node values.     */public:    vector<int> postorderTraversal(TreeNode *root) {        // write your code here        vector<int> res;        stack<TreeNode*> s;        TreeNode * cur;        TreeNode *pre = nullptr;        if (root == nullptr) {            return res;        }        s.push(root);        while (!s.empty()) {            cur = s.top();            if ((cur->left == nullptr && cur->right == nullptr) || (pre != nullptr && (pre==cur->left || pre == cur->right))) {                res.push_back(cur->val);                s.pop();                pre = cur;        }        else {            if (cur->right != nullptr) {                s.push(cur->right);            }            if (cur->left != nullptr) {                s.push(cur->left);            }            }        }        return res;    }    };


0 0
原创粉丝点击