(劍指offer)二叉搜搜索樹的後序遍歷
阿新 • • 發佈:2018-12-07
時間限制:1秒 空間限制:32768K 熱度指數:294137
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
思路
二叉搜尋樹後序遍歷,最右邊必然是根,左子樹全部小於根,右子樹全部大於等於根,由根找到右子樹開始元素,判定右子樹是否有元素小於等於根,再遞迴判定即可
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
//假定空陣列返回false
if (sequence == null || sequence.length == 0){
return false;
}
return judge(sequence, 0, sequence.length-1);
}
public boolean judge(int[] a, int st, int en){
//a[en]就是根
if(st>=en){
return true;
}
int i = st;
//找到右子樹的第一個元素
while(i<=en && a[i]<a[en]){
i++;
}
for(int j = i+1; j < en; j++){
if(a[j]<a[en]){
return false;
}
}
return judge(a, st, i-1) && judge(a, i, en-1);
}
}