LeetCode 94. 二叉树的中序遍历

leetcode acwing

递归 \(O(n)\)

递归写法是最简单的写法,先遍历左子树,再遍历自己,再遍历右子树。

class Solution {
public:

    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        dfs(root, res);
        return res;
    }

    TreeNode* dfs(TreeNode* root, vector<int>& res)
    {
        if (root == nullptr) return nullptr;
        dfs(root->left, res);
        res.push_back(root->val);
        dfs(root->right, res);

        return root;
    }
};

迭代 \(O(n)\)

使用栈来模拟递归

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        // 非递归版本,使用栈存,栈能模拟dfs
        stack<TreeNode*> st;
        vector<int> res;
        auto cur = root;
        while(cur || st.size())
        {
            while(cur)
            {
                st.push(cur);
                cur = cur->left;
            }
            if (st.size())
            {
                cur = st.top();
                res.push_back(cur->val);
                st.pop();
                cur = cur->right;
            }
        }

        return res;
    }
};
posted @ 2021-01-07 09:54  alexemey  阅读(38)  评论(0)    收藏  举报