輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。若是是則輸出Yes,不然輸出No。假設輸入的數組的任意兩個數字都互不相同。java
解題思路數組
給出的數組是後序遍歷,那麼最後一個元素對應着樹的根節點。code
數組前部分對應左子樹,其中元素都小於根節點;後部分對應右子樹,其中元素都大於根節點。遞歸
再分別對左右子樹進行遞歸地判斷。io
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { //在Java中,數組指向unll和數組爲空是不同的概念,要將這兩種特殊狀況都排除 if(sequence == null || sequence.length == 0) return false; // return helpVerify(sequence, 0, sequence.length - 1); } /** *helpVerify方法用於判斷當前這個數組是否知足二叉搜索樹的後序遍歷數組 *seq:當前被判斷的數組 *start:當前數組的第一個元素的下標 *end:當前數組的最後一個元素的下標 **/ public boolean helpVerify(int[] seq, int start, int end){ if(start >= end) return true; int root = seq[end]; int i; //找到左右子樹的分割處 for(i = start; i < end - 1; i ++){ if(seq[i] > root) break; } //判斷分割處以後的數字是否都大於根節點的值,若不是則返回false for(int j = i; j < end - 1; j ++){ if(seq[j] < root) return false; } //遞歸地判斷左右子樹 return helpVerify(seq, start, i) && helpVerify(seq, i, end - 1); } }