劍指offer每日一題算法題(java解法)
方便日後複習,從今天開始。
算法之行始於足下
[編程題]二叉搜索樹的後序遍歷-- Java實現
------------------------------------------------------------------------------------------------------
題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
解題思路:
最後一個數字是樹的根節點 ,數組中前面的數字可以分爲兩部分:第一部分是左子樹節點 的值,都比根節點的值小;第二部分 是右子樹 節點的值,都比 根 節點 的值大,後面用遞歸分別判斷前後兩部分 是否 符合以上原則
可以看一篇寫的不錯的,也是講這題二叉搜索樹的後序遍歷
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length == 0) return false;
return IsTreeBST(sequence, 0, sequence.length-1);
}
public boolean IsTreeBST(int [] sequence,int start,int end ){
if(end <= start) return true;
int i = start;
for (; i < end; i++) {
if(sequence[i] > sequence[end]) break;
}
for (int j = i; j < end; j++) {
if(sequence[j] < sequence[end]) return false;
}
//遞歸調用
return IsTreeBST(sequence, start, i-1) && IsTreeBST(sequence, i, end-1);
}
}