实现的思想
后序遍历的特点:根在最后输出
二叉搜索树的特点:根的值大于左子树值,小于右子树值
算法实现:
① 后序遍历数组最后面的值为整棵树的根root
② 遍历数组找到当前值比根root小并且后一个值大于根root的索引
③ 若数组为后续遍历,则索引后面的值都应该大于根root,若找到小于根root,则返回false
④ 若第③步不为false则递归的形参更新为左右子树数组索引继续重复②和③步骤。
public class Main
{
public static void main(String[] args)
{
//int[] arr={5,7,6,9,11,10,8};
int[] arr={4,7,5,9,13,11,8};
System.out.println(isProOfBST(arr,0, arr.length-1));
}
public static boolean isProOfBST(int[] arr,int left, int end)
{
if(arr == null || left > end) return false;
int root = arr[end];//后序遍历的最后一个为根节点
int i = left;
while(arr[i] < root && i < end)//找到左树的个数
i++;
int j = i;//先看右树中是否有非法数字,即比根节点小的数字
while(j < end)
{
if(arr[j] < root) return false;
j++;
}
if(i == end) return true; //如果寻找结果发现最后只有左右叶子节点,则返回true
return isProOfBST(arr, left, i-1) && isProOfBST(arr, i, end-1);
}
}