輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。假設輸入的數組的任意兩個數字都互不相同。
5 7 6 9 11 10 8
Yes
7 4 6 5
No
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0) return false;
return F(sequence, 0, sequence.length-1);
}
public boolean F(int[] sequence, int start, int end){
if(start>= end) return true;
//從後往前找到左右子樹分割的位置
int rightIndex = end-1;
while(rightIndex>=start){
if(sequence[rightIndex]>sequence[end]) rightIndex--;
else break;
}
rightIndex++;
//繼續往前,如果符合二叉搜索樹,應該是每一個都比自己小
int leftIndex = rightIndex-1;
while(leftIndex>=start){
if(sequence[leftIndex]<sequence[end]) leftIndex--;
else break;
}
//如果leftIndex!=start-1說明左子樹有比自己大的
if(leftIndex != start-1){
return false;
}
else{
return F(sequence, start, rightIndex-1) && F(sequence, rightIndex, end-1);
}
}
}