1. 程式人生 > 實用技巧 >二叉搜尋樹的後序遍歷序列

二叉搜尋樹的後序遍歷序列

二叉搜尋樹的後序遍歷序列

題目描述

輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回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);
    }