前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二叉树的前序遍历

二叉树的前序遍历

作者头像
大忽悠爱学习
发布2021-11-15 10:19:26
2080
发布2021-11-15 10:19:26
举报
文章被收录于专栏:c++与qt学习

递归:

代码语言:javascript
复制
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);
    }
};

迭代:

代码语言:javascript
复制
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 遍历 思路与算法

代码语言:javascript
复制
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遍历的解释 颜色表记法: 颜色标记法详解

代码语言:javascript
复制
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;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档