题解 | #实现二叉树先序,中序和后序遍历#

实现二叉树先序,中序和后序遍历

https://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:

    /**
     * 
     * @param root TreeNode类 the root of binary tree
     * @return int整型vector<vector<>>
     */

    // 定义三个一维数组
    vector<int> pre;
    vector<int> in;
    vector<int> pos;



    // 递归函数一
    void preorder(TreeNode* root)
    {
        if(root != nullptr)
        {
            pre.push_back(root->val);
            preorder(root->left);
            preorder(root->right);
        }
    }

    // 递归函数二
    void inorder(TreeNode* root)
    {
        if (root != nullptr)
        {
            inorder(root->left);
            in.push_back(root->val);
            inorder(root->right);
        }
    }

    // 递归函数三
    void posorder(TreeNode* root)
    {
        if (root != nullptr)
        {
            posorder(root->left);
            posorder(root->right);
            pos.push_back(root->val);
        }
    }



    // 迭代函数一(使用了一个栈)
    void preorder2(TreeNode* root)
    {
        if (root != nullptr)
        {
            stack<TreeNode*> stk1;
            stk1.push(root);

            while(!stk1.empty())
            {
                root = stk1.top(); // 用root方便进行表示
                pre.push_back(root->val);
                stk1.pop();

                if (root->right != nullptr)
                    stk1.push(root->right);
                if (root->left != nullptr)
                    stk1.push(root->left);
            }
        }
    }

    // 迭代函数二(使用了一个栈)
    void inorder2(TreeNode* root)
    {
        if (root != nullptr)
        {
            stack<TreeNode*> stk1;

            while(!stk1.empty() || root != nullptr)
            {
                if (root != nullptr)
                {
                    stk1.push(root);
                    root = root->left;
                }
                else
                {
                    root = stk1.top();
                    in.push_back(root->val);
                    stk1.pop();
                    root = root->right;
                }
            }
        }
    }


    // 迭代函数三(使用了两个栈)
    void posorder2(TreeNode* root)
    {
        if (root != nullptr)
        {
            stack<TreeNode*> stk1;
            stack<TreeNode*> stk2; // 第二个栈起到了反序的作用
            stk1.push(root);

            while(!stk1.empty())
            {
                root = stk1.top();
                stk2.push(root);
                stk1.pop();

                if (root->left != nullptr)
                    stk1.push(root->left);
                if (root->right != nullptr)
                    stk1.push(root->right);
            }
            while(!stk2.empty())
            {
                pos.push_back(stk2.top()->val);
                stk2.pop();
            }
        }
    }



    vector<vector<int> > threeOrders(TreeNode* root) {
        // write code here

        // 二维数组的操作
        vector<vector<int>> res;

        preorder2(root);
        res.push_back(pre);

        inorder2(root);
        res.push_back(in);

        posorder2(root);
        res.push_back(pos);

        return res;

    }
};

全部评论

相关推荐

2025-12-12 15:19
首先说明一下我眼中互联网大厂的定义:扎根互联网+对互联网影响重大T0:BAT(无先后)字节:如今&nbsp;TT&nbsp;已经成为全球最火的软件,直播电商创造的价值无法估计。对于&nbsp;AI&nbsp;技术,字节更是成立了&nbsp;seed&nbsp;部门,应用上有豆包,学术上有论文。阿里:业务就不多介绍,AI技术上和字节类似,通义实验室的&nbsp;AI&nbsp;也在国际上有一席之地。腾讯:更不用介绍,有鹅选鹅似乎永远不会过时。T1:蚂蚁蚂蚁:实际上,蚂蚁的认可度可以达到&nbsp;T0(当阿里用一点问题没有),熟悉商业史的同学都知道,蚂蚁没改名前叫做&quot;浙江阿里巴巴&quot;,除了这层关系,蚂蚁本身的业务、技术都配得上T0&nbsp;的宝座,把它排在&nbsp;T1&nbsp;主要还是&nbsp;bat&nbsp;的业务太广泛(且名义上不属于阿里巴巴)。T1.5:美团美团:个人感觉实力能够排在蚂蚁之后,但是认可度似乎还没那么高。即时零售已经成为电商领域的必争之地,美团作为霸主有非常多的优势。同时技术上,也是公认的很好,AI&nbsp;目前没有特别多的成果。T2:京东、pdd、滴滴、shopee、百度、shein、快手、TME、小红书等等,能够排在&nbsp;T2&nbsp;的定义:三个&nbsp;T2&nbsp;可以合成一个&nbsp;T0,这个层次的大厂认可度其实没有太大区别了,社招简历都能过筛。(TME&nbsp;的认可度也可以当腾讯用,但是&nbsp;TME&nbsp;本身实力不像蚂蚁,所以只能在&nbsp;T2)对于美团:我认为美团比&nbsp;T2&nbsp;其他大厂强很多,但是又比&nbsp;T1、T0&nbsp;的大厂逊色不少,就单独为&nbsp;T1.5&nbsp;了。中厂定义:不属于&nbsp;T2&nbsp;的互联网大公司,例如&nbsp;soul、陌陌、知乎、科大讯飞这种,他们有知名度,但是认可度差了&nbsp;T2&nbsp;一个档次,也没办法“三合一成为T0”
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务