二叉树的前序遍历
2023-09-14 09:02:34 时间
递归:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> v;
pre(root, v);
return v;
}
void pre(TreeNode* root, vector<int>& v)
{
if (!root)
return;
v.push_back(root->val);
pre(root->left,v);
pre(root->right, v);
}
};
迭代:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root)
{
vector<int> ret;
stack<TreeNode*> s;
//当栈不为空或者root不为空的时候进入while循环
while (!s.empty() || root)
{
while (root)
{
s.push(root);
ret.push_back(root->val);
root = root->left;
}
root = s.top()->right;
s.pop();
}
return ret;
}
};
Morris 遍历
思路与算法
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
vector<int> res;
if (root == nullptr) {
return res;
}
TreeNode *p1 = root, *p2 = nullptr;
while (p1 != nullptr) {
p2 = p1->left;
if (p2 != nullptr) {
while (p2->right != nullptr && p2->right != p1) {
p2 = p2->right;
}
if (p2->right == nullptr) {
res.emplace_back(p1->val);
p2->right = p1;
p1 = p1->left;
continue;
} else {
p2->right = nullptr;
}
} else {
res.emplace_back(p1->val);
}
p1 = p1->right;
}
return res;
}
};
大佬对mirror遍历的解释
颜色表记法:
颜色标记法详解
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> ret;
stack<pair<string, TreeNode*>> s;
if (root == NULL)
return ret;
s.push({"white",root});
while (!s.empty())
{
pair<string,TreeNode*> temp=s.top();
s.pop();
if (temp.second == NULL)
continue;
if (temp.first == "white")
{
if (temp.second->right == NULL && temp.second->left == NULL)
{
s.push({ "grey",temp.second });
}
else
{
temp.first = "grey";
s.push({ "white", temp.second->right });
s.push({ "white", temp.second->left });
s.push(temp);
}
}
else
{
ret.push_back(temp.second->val);
}
}
return ret;
}
};
相关文章
- 中序遍历和前序遍历确定一棵二叉树(笔算)
- Java实现 LeetCode 637 二叉树的层平均值(遍历树)
- Java实现 LeetCode 623 在二叉树中增加一行(遍历树)
- Java实现 LeetCode 144 二叉树的前序遍历
- 【二叉树】106. 从中序与后序遍历序列构造二叉树 【中等】
- LeetCode(102):二叉树的层次遍历
- 144. 二叉树的前序遍历
- ( “树” 之 前中后序遍历 ) 144. 二叉树的前序遍历 ——【Leetcode每日一题】
- 二叉树的前序遍历(C++)
- 【LeetCode 中等 树 python3】144. 二叉树的前序遍历
- 2415. 反转二叉树的奇数层-层次遍历
- 层次遍历二叉树
- [LeetCode] 114. 二叉树展开为链表 ☆☆☆(深度遍历)
- 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
- 算法实验-二叉树的创建和前序-中序-后序-层次 遍历
- 二叉树的非递归遍历--京东2015笔试回顾
- 二叉树前、中、后遍历详解【递归+迭代+morris】
- 二叉树前序中序后序遍历
- 二叉树的前序、中序、后序遍历(个人笔记)
- 【Leetcode刷题Python】145. 二叉树的后序遍历
- 【Leetcode刷题Python】144. 二叉树的前序遍历
- LeetCode 102. 二叉树的层序遍历
- LeetCode 144. 二叉树的前序遍历