中序序列_

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int 二叉树节点数量
     * @param pre intvector 前序序列
     * @param suf intvector 后序序列
     * @return intvector
     */
     void get (int l1, int r1, vector &pre, 
     	int l2, int r2, vector &suf, vector &ans) {
         
     	int root = suf[r2];
     	int pos = -1;
     	for (int i = l2; i <= r2; i ++) {
     		if (suf[i] == pre[l1 + 1]) {
     			pos = i;
                break;
     		}
     	}
         
         if (r1 > l1)
     	get(l1 + 1, l1 + 1 + pos - l2, pre, 
     	l2, pos, suf, ans);
         
     	if (r1 >= l1 && r2 >= l2)
     	ans.push_back(pre[l1]);
         
     	if (r2 > l2)
     	get(l1+ pos-l2+2, r1, pre, 
     	 pos + 1, r2 - 1, suf, ans);
    }
    vector solve(int n, vector& pre, vector& suf) {
       vector ans;
        get(0, n - 1, pre, 0, n - 1, suf, ans);
        return ans;
    }
};

传引用比传复制快 这里思路是首先找到分界点 然后遍历左子树和右子树

你可能感兴趣的:(练习题目,递归)