本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。若是是則返回true,不然返回false。假設輸入的數組的任意兩個數字都互不相同。數組
二叉樹後序遍歷數組的最後一個數爲根結點,剩餘數字中,小於根結點的數字(即左子樹部分)都排在前面,大於根結點的數字(即右子樹部分)都排在後面。根據遍歷數組的這個特性,能夠編寫出一個遞歸函數,用於實現題目所要求的判斷功能。函數
測試算例 post
1.功能測試(左斜樹;右斜樹;能對應的二叉樹;不能對應的二叉樹序列)測試
2.特殊測試(null;一個結點)url
//題目:輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。 //若是是則返回true,不然返回false。假設輸入的數組的任意兩個數字都互不相同。 public class SquenceOfBST { public boolean verifySquenceOfBST(int[] sequence) { if(sequence== null || sequence.length<=0) return false; return verifyCore(sequence, 0, sequence.length-1); } private boolean verifyCore(int[] sequence,int start,int end) { if(start>=end) return true; //判斷左子樹 int mid=start; while(sequence[mid]<sequence[end]) mid++; //判斷右子樹 for(int i=mid;i<end;i++) { if(sequence[i]<sequence[end]) return false; } return verifyCore(sequence, start, mid-1)&&verifyCore(sequence, mid, end-1); } }
1.尋找出序列規律,就能較快獲得思路。此題若是改成BST的前序遍歷也是相同的思路。spa
2.對於要求處理二叉樹序列的問題:找到根結點後,拆分出左右子樹,對左右子樹能夠進行遞歸處理。htm
3.雖然有了思路,但本身在編寫代碼的時候仍是寫得比較亂,花了一些時間才能修改出比較簡潔和清晰易懂的版本,說明本身寫的代碼量仍是不夠,要繼續多加練習。blog