二叉搜尋樹的後序遍歷序列
阿新 • • 發佈:2020-08-15
二叉搜尋樹的後序遍歷序列
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。
分析:
程式碼實現:
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0){ return false; } return Verify(sequence,0,sequence.length-1); } public boolean Verify(int[] sequence,int start,int end){ if(start>=end){ return true; } int i=start; while(sequence[i]<sequence[end]){ i++; } for(int j=i;j<end;j++){ if(sequence[j]<sequence[end]){ return false; } } return Verify(sequence,start,i-1)&&Verify(sequence,i,end-1); } }
問題總結
在除錯過程中,傳入的測試資料:
在向左遞迴的時候,然後再回溯的時候start=1
了,這是為什麼啊
這是測試程式碼
psvm
public static void main(String[] args) {
// String str = "ab";
int[] arr = {1, 4, 2, 6, 11, 9, 5};
boolean r = VerifySquenceOfBST(arr);
System.out.println(r);
}
主程式碼:
public static boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0){ return false; } return Verify(sequence,0,sequence.length-1); } public static boolean Verify(int[] sequence,int start,int end){ if(start>=end){ return true; } int i=start; while(sequence[i]<sequence[end]){ i++; } for(int j=i;j<end;j++){ if(sequence[j]<sequence[end]){ return false; } } return Verify(sequence,start,i-1)&&Verify(sequence,i,end-1); }