題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
補充:
- 二叉查找樹(Binary Search Tree)又:二叉搜索樹,二叉排序樹,它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別爲二叉搜索樹。
- 後序遍歷:左 -> 右 -> 根。
思路:由於以上性質,所以數組的最後一個數字即爲二叉排序樹根節點,跟據此節點將數組分爲兩部分,然後將這兩個部分遞歸判斷。
代碼:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length == 0)return false;
return Verify(sequence,0,sequence.length-1);
}
public boolean Verify(int[] sequence,int first,int last){
if(first>=last)return true;
int l = sequence[last];
int index = first;
while(sequence[index]<l){
index++;
}
for(int i = index;i<last;i++){
if(sequence[i]<l)return false;
}
return Verify(sequence,first,index-1) && Verify(sequence,index,last-1);
}
}