题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数字的任意两个数字都互不相同。

在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树结点的值,它们都比根结点的值小;第二部分是右子树结点的值,它们都比根结点的值大。
代码实现:
public class Solution{ public static boolean VerifySequenceOfBST(int[] numbers,int start,int end){ if(numbers==null||numbers.length==0){ return false; } if(start==end){ return true; } int root=numbers[end]; //在二叉搜索树中左子树的结点小于根结点 int i=start; for(;i<end;i++){ if(numbers[i]>root){ break; } } //在二叉搜索树中右子树的结点大于根结点 for(int j=i;j<end;j++){ if(numbers[j]<root){ return false; } } //判断左子树是不是二叉搜索树 boolean left=true; if(i>start){ left=VerifySequenceOfBST(numbers,start,i-1); } //判断右子树是不是二叉搜索树 boolean right=true; if(i<end){ right=VerifySequenceOfBST(numbers,i,end-1); } return left&&right; } public static void main(String[] args){ int[] arr={5,7,6,9,11,10,8}; boolean result=VerifySequenceOfBST(arr,0,arr.length-1); System.out.println(result); } }
posted on
浙公网安备 33010602011771号