public int[] findOrder(int[] pre, int[] in) {
int n = pre.length;
int[] post = new int[n];
findOrderSub(pre, 0, n-1, in, 0, n-1, post, 0, n-1);
return post;
}
private void findOrderSub(int[] pre, int preLo, int preHi, int[] in, int inLo, int inHi, int[] post, int postLo, int postHi) {
if (preLo > preHi) return;
int root = pre[preLo];
int k = inLo;
while (k <= inHi) {
if (in[k] == root) {
break;
}
k++;
}
int numLeft = k - inLo;
post[postHi] = root;
findOrderSub(pre, preLo+1, preLo + numLeft, in, inLo, k-1, post, postLo, postLo+numLeft-1);
findOrderSub(pre, preLo+numLeft+1, preHi, in, k+1, postHi, post, postLo+numLeft, postHi-1);
}
二叉树,根据中序与先序数组,求后序遍历的数组 不建树的情况下
最新推荐文章于 2021-03-08 21:01:10 发布