1.二叉搜索树的后序序列转为前序序列
public void PostToPre(int [] nums, int start, int end) {
if(start>=end)
return ;
int record = nums[end]; //最后一个为二叉搜索树的根节点
//移动数组元素
for(int i=end; i>start;i--) { //移动根节点的位置,使其变为前序序列
nums[i] = nums[i-1];
}
nums[start] = record;
int i = start+1;
for(;i<=end;i++) { //根据根节点的大小,确定左子树序列和右子树序列的范围
if(nums[i]>nums[start]) {
break;
}
}
PostToPre(nums,start+1,i-1); //递归处理左右子树
PostToPre(nums,i,end);
}
2.二叉搜索树前序转后序
public static void PreToPost(int[] nums, int start, int end) {
if (start >= end)
return;
int record = nums[start]; // 第一个为二叉搜索树的根节点
// 移动数组元素使其变为前序序列
for (int i = start + 1; i <= end; i++) {
nums[i - 1] = nums[i];
}
nums[end] = record;
// 根据根节点的大小确定左右子树的范围
int i = start;
for (; i <= end; i++) {
if (nums[i] > record) {
break;
}
}
PreToPost(nums, start, i - 1);
PreToPost(nums, i, end - 1);
}