24.二叉搜尋樹的後序遍歷(JAVA)
阿新 • • 發佈:2018-12-22
二叉搜尋樹的後序遍歷
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出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);//左右子樹分別遞迴
}
}