
北尘_:个人主页
个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》
☀️走在路上,不忘来时的初心
文章目录
- 一、二叉树的前序非递归遍历
-
- 二、二叉树的中序非递归遍历
-
- 三、二叉树的后序非递归遍历
-
一、二叉树的前序非递归遍历
1、题目讲解


2、思路讲解

3、代码实现
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
stack<TreeNode*> s;
vector<int> v;
TreeNode* cur=root;
while(cur || !s.empty())
{
while(cur)
{
s.push(cur);
v.push_back(cur->val);
cur=cur->left;
}
TreeNode* top=s.top();
s.pop();
cur=top->right;
}
return v;
}
};
二、二叉树的中序非递归遍历
1、题目讲解


2、思路讲解

3、代码实现
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
vector<int> v;
TreeNode* cur=root;
while(cur || !s.empty())
{
while(cur)
{
s.push(cur);
cur=cur->left;
}
TreeNode* top=s.top();
s.pop();
v.push_back(top->val);
cur=top->right;
}
return v;
}
};
三、二叉树的后序非递归遍历
1、题目讲解

2、思路讲解

3、代码实现
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
stack<TreeNode*> s;
vector<int> v;
TreeNode* cur=root,*prev=nullptr;
while(cur || !s.empty())
{
while(cur)
{
s.push(cur);
cur=cur->left;
}
TreeNode* top=s.top();
if(top->right==nullptr || top->right==prev)
{
s.pop();
v.push_back(top->val);
prev=top;
}
else
{
cur=top->right;
}
}
return v;
}
};