1. 程式人生 > >24.二叉搜尋樹的後序遍歷(JAVA)

24.二叉搜尋樹的後序遍歷(JAVA)

二叉搜尋樹的後序遍歷

題目描述

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

具體實現

解題思路:利用遞迴來完成,用後序遍歷的特點,根結點永遠在最後一位,還有二叉搜尋樹的特點,左子樹都小於根結點,右子樹都大於根結點,這樣每次都可以把序列分成三段,第一段是左子樹,第二段是右子樹,第三段是一個根結點。然後左右子樹又分別遞迴呼叫即可

public class Solution {
     public boolean VerifySquenceOfBST(int [] sequence) {
        if
(sequence == null || sequence.length <= 0) return false; //遞迴呼叫,後面兩個引數是陣列的起始點到結束點 return BST(sequence, 0, sequence.length-1); } public boolean BST(int[] sequence, int l, int r) { if(l >= r)//遞迴出口 return true; //找到左右子樹的分隔點,[l,i-1]是左子樹,[i,r]是右子樹 int i =
r; while(i > l && sequence[i-1] > sequence[r]) { --i; } //如果左子樹中有結點大於根結點,不符合二叉搜尋樹,直接返回false for(int j = i - 1; j >= l; --j) { if(sequence[j] > sequence[r]) return false; } return BST(sequence, l, i - 1) && BST(sequence, i, r -
1);//左右子樹分別遞迴 } }