LeetCode 94. 二叉树的中序遍历
递归 \(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;
}
};

浙公网安备 33010602011771号