- 二叉搜索樹
二叉搜索樹又名二叉查找樹、二叉排序樹,見名知意,它是一顆有序的樹。分爲兩種狀態:- 該樹是一棵空樹
- 該樹符合以下定義:
如果有左子樹,則所有的左子樹結點的值都比根結點小;如果有右子樹,則所有右子樹結點的值都比根結點大。所有的左右子樹都符合上述規律。
- 思考該題
- 題目
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。 - 思路
由上述可以知道,對於一顆二叉搜索樹而言,利用後序遍歷會讓整個數組分爲兩部分:前面部分爲左子樹,其所有值都比根結點(即是數組最後一個數值)小;後半部分爲右子樹,其所有值都比根結點大。並且,該特性在子樹中也適用。
所以,我們可以利用該特性去解決該問題。
圖示上述特性:
- 代碼結果:
- 代碼:
public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length == 0) return false; return VerifySequenceOfBST(sequence, 0, sequence.length - 1); } public boolean VerifySequenceOfBST(int[] sequence, int begin, int end){ if(end - begin == 0) return true; for(int i =0;i<end ;i++){ if(sequence[i] < sequence[end]){ continue; } for(int j=i+1;j<end;j++){ if(sequence[j] < sequence[end]){ return false; } } return VerifySequenceOfBST(sequence, begin, i) && VerifySequenceOfBST(sequence, i+1, end-1); //因爲上面已經把根結點比較過了,所以捨棄了根結點(即是最後一個點) } return true; } }
- 題目
劍指offer之二叉搜索樹的後序遍歷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.