1. 先序遍历
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> result;
stack<TreeNode *> st;
TreeNode *p = root;
while (!st.empty() || p != nullptr)
{
if (p != nullptr)
{
result.push_back(p->val);
st.push(p);
p = p->left;
}
else
{
p = st.top(), st.pop();
p = p->right;
}
}
return result;
}
2. 中序遍历
vector<int> inorderTraversal(TreeNode* root)
{
vector<int> result;
stack<TreeNode *> st;
TreeNode *p = root;
while (!st.empty() || p != nullptr)
{
if (p != nullptr)
{
st.push(p);
p = p->left;
}
else
{
p = st.top(), st.pop();
result.push_back(p->val);
p = p->right;
}
}
return result;
}
3. 后续遍历
#if 1
vector<int> postorderTraversal(TreeNode* root)
{
vector<int> result;
if (root == nullptr)
{
return result;
}
stack<TreeNode *>stack;
for (auto p = root; p != nullptr; p = p->left)
{
stack.push(p);
}
map<TreeNode*, bool> visit;
while (!stack.empty())
{
auto node = stack.top();
if (node->right != nullptr && !visit[node->right])
{
for (auto p = node->right; p != nullptr; p = p->left)
{
stack.push(p);
}
continue;
}
stack.pop();
visit[node] = true;
result.push_back(node->val);
}
return result;
}
#else
vector<int> postorderTraversal(TreeNode* root)
{
vector<int> result;
stack<TreeNode *> st;
TreeNode *p = root;
while (!st.empty() || p != nullptr)
{
if (p != nullptr)
{
st.push(p);
result.insert(result.begin(), p->val);
p = p->right;
}
else
{
p = st.top(), st.pop();
p = p->left;
}
}
return result;
}
#endif
搭建了自己的博客,欢迎来访 www.ditanshow.com