import java.util.HashMap;
/**
* Created by lxw, liwei4939@126.com on 2017/11/7.
* 通过先序和中序数组生成后序数组
*/
public class fromPreInToPos {
public int[] getPosArray(int[] pre, int[] in){
if(pre == null || in == null){
return null;
}
int len = pre.length;
int[] pos = new int[len];
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i=0; i< len; i++){
map.put(in[i], i);
}
setPos(pre, 0, len-1, in, 0, len-1, pos, len-1, map);
return pos;
}
public int setPos(int[] p, int pi, int pj, int[] n, int ni, int nj, int[] s,
int si, HashMap<Integer, Integer> map){
if(pi > pj){
return si;
}
s[si--] = p[pi];
int i = map.get(p[pi]);
si = setPos(p, pj - nj + i + 1, pj, n, i+1, nj, s, si, map);
return setPos(p, pi+1, pi+i-ni, n, ni, i-1, s, si, map);
}
public static void main(String[] args){
fromPreInToPos tmp = new fromPreInToPos();
int[] pre = {1, 2, 4, 5, 3, 6, 7};
int[] in = {4, 2, 5, 1, 6, 3, 7};
int[] pos = tmp.getPosArray(pre, in);
for (int ele:pos){
System.out.print(ele + " ");
}
System.out.println();
}
}
通过先序和中序数组生成后序数组
最新推荐文章于 2021-04-02 23:29:06 发布