二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
分析:
代码实现:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0){
return false;
}
return Verify(sequence,0,sequence.length-1);
}
public boolean Verify(int[] sequence,int start,int end){
if(start>=end){
return true;
}
int i=start;
while(sequence[i]<sequence[end]){
i++;
}
for(int j=i;j<end;j++){
if(sequence[j]<sequence[end]){
return false;
}
}
return Verify(sequence,start,i-1)&&Verify(sequence,i,end-1);
}
}
问题总结
在调试过程中,传入的测试数据:
在向左递归的时候,然后再回溯的时候start=1
了,这是为什么啊
这是测试代码
psvm
public static void main(String[] args) {
// String str = "ab";
int[] arr = {1, 4, 2, 6, 11, 9, 5};
boolean r = VerifySquenceOfBST(arr);
System.out.println(r);
}
主代码:
public static boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0){
return false;
}
return Verify(sequence,0,sequence.length-1);
}
public static boolean Verify(int[] sequence,int start,int end){
if(start>=end){
return true;
}
int i=start;
while(sequence[i]<sequence[end]){
i++;
}
for(int j=i;j<end;j++){
if(sequence[j]<sequence[end]){
return false;
}
}
return Verify(sequence,start,i-1)&&Verify(sequence,i,end-1);
}