中序序列(前序后序转中序)***

中序序列

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int 二叉树节点数量
     * @param pre intvector 前序序列
     * @param suf intvector 后序序列
     * @return intvector
     */
    vector<int> res;
    
    vector<int> solve(int n, vector<int>& pre, vector<int>& suf) {
        dfs(0, n - 1, 0, n - 1, pre, suf);
        return res;
    }
    void dfs(int l1, int r1, int l2, int r2, vector<int>& pre, vector<int>& suf){
        if(l1 > r1 || l1 < 0 || r1 > pre.size() - 1) return;
        if(l1 == r1){
            res.push_back(pre[l1]);
            return;
        }
        int index = l2;
        for( ; index <= r2; ++index){
            if(suf[index] == pre[l1+1]) break;
        }
        dfs(l1 + 1, l1 + 1 + index - l2, l2, index, pre ,suf);
        res.push_back(pre[l1]);
        dfs(r1 - (r2 - index - 1) + 1, r1, index + 1, r2 - 1, pre, suf);
    }
};
posted @ 2025-03-18 15:17  awei040519  阅读(17)  评论(0)    收藏  举报