题解 | 输出二叉树的右视图

输出二叉树的右视图

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

class Solution {
public:
    vector<int> solve(vector<int>& preOrder, vector<int>& inOrder) {
        dfs(preOrder, inOrder, 0);
        return ans;
    }

private:
    vector<int> ans;
    
    void dfs(const vector<int>& preOrder, const vector<int>& inOrder, int depth)
    {
        if(preOrder.size() == 0) return;
        if(ans.size() == depth) ans.push_back(preOrder[0]);
        int idx = 0;
        for(int i =0; i < inOrder.size(); i++)
        {
            if(inOrder[i] == preOrder[0])
            {
                idx = i;
                break;
            }
        }

        dfs(vector<int>(preOrder.begin() + idx + 1, preOrder.end()),
        vector<int>(inOrder.begin() + idx + 1, inOrder.end()), depth + 1);
        dfs(vector<int>(preOrder.begin()+1, preOrder.begin() + idx + 1),
        vector<int>(inOrder.begin(), inOrder.begin() + idx), depth + 1);
    }
};

在递归重建时优先从右子树开始重建,如果首次到达新的一层记录节点即可

全部评论
厉害哦😺
点赞 回复 分享
发布于 04-15 17:33 广东

相关推荐

评论
点赞
收藏
分享

创作者周榜

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