/**
* 二叉搜索樹的後序遍歷序列
*
* @return
*/
public boolean verifySquenceOfBST(int[] arr) {
if (null == arr || arr.length < 2) return true;
return is(0, arr.length - 1, arr);
}
private static boolean is(int left, int right, int[] arr) {
if (left >= right) return true;
int r = arr[right];
int index = left;
//從右到左找到小於最右的值,記錄索引
for (int i = right - 1; i > left; i--) {
if (arr[i] < r) {
index = i;
break;
}
}
//判斷右邊是否是二叉搜索樹
boolean b = is(index + 1, right - 1, arr);
if (b) {
//如果左邊有大於最右邊的值,直接返回false
for (int i = left; i < index; i++) {
if (r < arr[left]) return false;
}
//判斷左邊是否是二叉搜索樹
return is(left, index, arr);
}
return false;
}
劍指Offer學習-面試題33:二叉搜索樹的後序遍歷序列
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.