[劍指offer] --24.二叉搜尋樹的後序遍歷序列
阿新 • • 發佈:2018-11-15
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出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); } }