题目描述
给定一个有 n 个不重复整数的数组 arr,判断 arr 是否可能是节点值类型为整数的搜索二叉树后序遍历的结果。
输入描述:
第一行一个整数 n,表示数组的长度。
第二行 n 个整数 arr_i。
输出描述:
如果是搜索二叉树后序遍历的结果则输出 “true”,否则输出 “false”。
示例1
输入
3
1 3 2
3 0 0
2 0 0
输出
true
解法一:递归
**思路:**左边比中间大,右边比中间小
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine();
String[] ss = br.readLine().trim().split(" ");
int[] arr = new int[ss.length];
for(int i=0;i<arr.length;i++){
arr[i] = Integer.parseInt(ss[i]);
}
boolean res = judge(arr,0,arr.length-1);
System.out.println(res);
}
public static boolean judge(int[] arr,int l,int r){
if(arr==null||r-l+1<3) return true;
int midnum = arr[r];
int i = l;
while(i<r&&arr[i]<midnum){
i++;
}
int right = i;
while(i<r&&arr[i]>midnum){
i++;
}
if(i!=r) return false;
if(right==l||right==r) return judge(arr,l,r-1);
return judge(arr,l,right-1)&&judge(arr,right,r-1);
}
}
另外假如已知是后序,也可以利用上述方法重建二叉树,不需要中序也行可以直接求出来