1. 程式人生 > >[劍指offer] --24.二叉搜尋樹的後序遍歷序列

[劍指offer] --24.二叉搜尋樹的後序遍歷序列

題目描述

輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        
    }
}

解題思路

  • 1、確定root;
  • 2、遍歷序列(除去root結點),找到第一個大於root的位置,則該位置左邊為左子樹,右邊為右子樹;
  • 3、遍歷右子樹,若發現有小於root的值,則直接返回false;
  • 4、分別判斷左子樹和右子樹是否仍是二叉搜尋樹(即遞迴步驟1、2、3)。
public class Solution {

    public boolean VerifySquenceOfBST(int [] sequence) {
        if (sequence == null || sequence.length==0) {
            return false;
        }
        return isBST(sequence,0,sequence.length-1);
    }

    private boolean isBST(int[] sequence, int start, int end) {
        if (start>= end){
            return true;
        }
        int i=start;
        for (;i<end;i++){
            if (sequence[i]>sequence[end]){
                break;
            }
        }
        for (int j=i;j<end;j++){
            if (sequence[j]<sequence[end]){
                return false;
            }
        }
        return isBST(sequence,start,i-1)&&isBST(sequence,i,end-1);
    }
}