輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。

//方案一:code

public class Solution {io

public boolean VerifySquenceOfBST(int [] sequence) {

    int len=sequence.length-1;
    
    if(len<0)
        return false;
    int i=0;
    while(len>0){
        while(sequence[i]<sequence[len])
            i++;
        while(sequence[i]>sequence[len])
            i++;
        
        if(i<len)
            return false;
        i=0;
        len--;
    }
    
    return true;
}

}class

//方案二while

public class Solution {co

public boolean VerifySquenceOfBST(int [] sequence) {

   int len=sequence.length-1;
    if(len<0)
        return false;
    return f(sequence,0,len);
}

public boolean f(int a[],int start,int end){
    if(start==end)
        return true;
    
    int left=start;
    
    while(a[left]<a[end]&&left<end)
        left++;
    
    int right=left;
    
    while(a[right]>a[end]&&right<end)
        right++;
    
    if(right<end)
        return false;
    
    if(left==start||left==end)//只有左子樹或者只有右子樹
        return f(a,start,end-1);
    
    else //既有左子樹又有右子樹
        return f(a,start,left-1)&&f(a,left,end-1);
    
}

}return

//感受彷佛方案一更好理解,方案二思路上好像更簡單些tar

相關文章
相關標籤/搜索