題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
之前對於二叉搜索樹,只知道中序遍歷是遞增的,今天做到這道題目,要求判斷數組是不是二叉搜索樹后序遍歷的結果,一開始有點懵,后來在紙上畫畫,感覺很像遞歸的感覺,有一種特別像歸並排序的那種感覺一樣,然后發現對於每一個樹的子結構而言,我們將其分成左右子樹兩部分就可以很明白這種遞歸的結構了,分成兩部分,然后分別對左右在遞歸,直到葉子節點
1 public class Solution { 2 public boolean VerifySquenceOfBST(int [] sequence) { 3 if(sequence.length==0) 4 return false; 5 return helper(sequence,0,sequence.length-1); 6 } 7 public boolean helper(int[] arr, int l,int r) 8 { 9 if(l>=r) 10 return true; 11 for(int i=l;i<r;i++) 12 { 13 if(arr[i]>arr[r]) 14 { 15 for(int j=i;j<r;j++) 16 if(arr[j]<arr[r]) 17 return false; 18 return helper(arr,l,i-1)&&helper(arr,i,r-1); 19 } 20 } 21 return true; 22 } 23 }