描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
代碼
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0){
return false;
}
int i = sequence.length-1;
return judge(sequence,0,i);
}
boolean judge(int[] arr,int left,int right){
if(left>=right){
return true;
}
int root = arr[right];
int i = left;
while(arr[i]<root){
i++;
}
int j = i;
while(j<right){
if(arr[j]<root){
return false;
}
j++;
}
return judge(arr,0,i-1)&&judge(arr,i,j-1);
}
}
心得
二叉樹的後續遍歷 左 右 根 ,所以從後往前依次是 根 右子樹 左子樹
只需要驗證左子樹均小於根 右子樹均大於根 且 子樹也符合上面的要求