题解 | #输出二叉树的右视图-修改先序遍历顺序#

输出二叉树的右视图

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

#include <unordered_map>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 求二叉树的右视图
     * @param preOrder int整型vector 先序遍历
     * @param inOrder int整型vector 中序遍历
     * @return int整型vector
     */
    vector<int> solve(vector<int>& preOrder, vector<int>& inOrder) {
        // write code here
        TreeNode* root = Rebuild(preOrder, inOrder);
     
        RightRecur(root, 0);

        vector<int> res;
        for (int i = 0; i <= max_depth; i++)
        {
            res.push_back(map[i]);
        }
	  
        return res;
    }

    TreeNode* Rebuild(vector<int> preOrder, vector<int> vinOrder)
    {
        int n = preOrder.size();
        int m = vinOrder.size();

        if (m == 0 || n == 0)
            return nullptr;

        TreeNode* root = new TreeNode(preOrder[0]);

        for (int i = 0; i < m; i++)
        {
            if (preOrder[0] == vinOrder[i])
            {
                vector<int> preLeft(preOrder.begin() + 1, preOrder.begin() + i + 1);
                vector<int> vinLeft(vinOrder.begin(), vinOrder.begin() + i);

                root->left = Rebuild(preLeft, vinLeft);

                vector<int> preRight(preOrder.begin() + i + 1, preOrder.end());
                vector<int> vinRight(vinOrder.begin() + i + 1, vinOrder.end());

                root->right = Rebuild(preRight, vinRight);         
            }
        }

        return root;       
    }

    int max_depth = -1;
    unordered_map<int, int> map;
    void RightRecur(TreeNode* root, int deep)
    {
        if (!root)
            return;

        RightRecur(root->right, deep + 1);
        RightRecur(root->left, deep + 1);

        if (map.find(deep) == map.end())
        {
            map[deep] = root->val;
            max_depth = max(max_depth, deep);
        }
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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