题目链接:leetcode.
递归
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
void dfs(TreeNode* root, vector<int>& ans)
{
if(root == nullptr)
{
return;
}
dfs(root -> left, ans);
ans.emplace_back(root -> val);
dfs(root -> right, ans);
}
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
dfs(root, ans);
return ans;
}
};
我写的迭代,(用哈希表存储是否访问过,low
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
if(root == nullptr)
{
return {};
}
vector<int> ans;
stack<TreeNode*> S;
unordered_set<TreeNode*> hash;
S.push(root);
while(!S.empty())
{
TreeNode* tmp = S.top();
while(tmp -> left && hash.count(tmp -> left) == 0)
{
S.push(tmp -> left);
tmp = S.top();
}
S.pop();
ans.emplace_back(tmp -> val);
hash.insert(tmp);
if(tmp -> right)
S.push(tmp -> right);
}
return ans;
}
};
官解的迭代
/*
执行用时:4 ms, 在所有 C++ 提交中击败了41.18%的用户
内存消耗:8.1 MB, 在所有 C++ 提交中击败了77.51%的用户
*/
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> S;
TreeNode* p = root;
while(!S.empty() || p != nullptr)
{
while(p != nullptr)
{
S.push(p);
p = p -> left;
}
p = S.top();
S.pop();
ans.emplace_back(p -> val);
p = p -> right;
}
return ans;
}
};
1213

被折叠的 条评论
为什么被折叠?



