1. 程式人生 > >劍指Offer面試題33二叉搜尋樹的後序遍歷序列java版

劍指Offer面試題33二叉搜尋樹的後序遍歷序列java版

題目:輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
分析:在後序遍歷序列中,最後一個數字是樹的根節點的值。陣列中前面的數字可以分為兩部分:第一部分是左子樹節點的值,它們都比根節點的值小;第二部分是右子樹節點的值,它們都比根節點的值大。

所以先取陣列中最後一個數,作為根節點。然後從陣列開始計數比根節點小的數,並將這些記作左子樹,然後判斷後序的樹是否比根節點大,如果有點不滿足,則跳出,並判斷為不成立。全滿足的話,依次對左子樹和右子樹遞迴判斷。

程式碼:

public class Solution
{
public boolean VerifySquenceOfBST(int [] sequence) { if(sequence==null||sequence.length<=0) return false; return verifySquenceOfBST(sequence,0,sequence.length-1); } private boolean verifySquenceOfBST(int[] sequence,int start,int end){ if(start>=end) return true
; int root=sequence[end]; int i=start; while(sequence[i]<root){ i++; } int j=i; while(j<end){ if(sequence[j]<root){ return false; } j++; } boolean left=verifySquenceOfBST(sequence,start,i-1
); boolean right=verifySquenceOfBST(sequence,i,end-1); return left&&right; } }