題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
解題思路
二叉搜索樹具有左孩子小於當前節點,右孩子大於當前節點的性質,後序遍歷及左右根,因而後序遍歷序列中的最後一個節點即爲根節點,然後對前面的節點進行遍歷,小於根節點的屬於左子樹,大於根節點的屬於右子樹,找到分界點,如果在分界點右側存在大於根節點的節點那麼這個遍歷序列不可能是二叉搜索樹的遍歷序列。進行遞歸調用判斷左子樹和右子樹。
public class erchashudehouxubianlixulie {
public boolean isBackSequence(int[] sequence, int start, int end) {
if (start >= end)
return true;
int root = sequence[end];
int index = 0;
while (sequence[index] < root)
index++;
for (int i = index; i < end - 1; i++) {
if (sequence[i] < root)
return false;
}
return isBackSequence(sequence, start, index - 1) && isBackSequence(sequence, index, end - 1);
}
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence == null || sequence.length == 0)
return false;
return isBackSequence(sequence, 0, sequence.length - 1);
}
}