二叉搜尋樹的後序遍歷序列(java版)

2021-08-02 08:54:09 字數 929 閱讀 7759

【題目描述】輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。

【解題思路】

bst的後序序列的合法序列是,對於乙個序列s,最後乙個元素是x (也就是根),如果去掉最後乙個元素的序列為t,那麼t滿足:t可以分成兩段,前一段(左子樹)小於x,後一段(右子樹)大於x,且這兩段(子樹)都是合法的後序序列。完美的遞迴定義 。

//1. 二叉搜尋樹的特點是,當前節點的左子樹值都小於當前節點值,右子樹值都大於當前節點值。

//2. 後序遍歷的遍歷順序時左子樹、右子樹、根節點。所以對於給定的乙個整數陣列,陣列的最後乙個即為二叉樹的根節點。

//3. 陣列中根節點前面的元素,若保證在某個元素k前的元素都小於根節點,k之後的元素都大於根節點,則在根節點滿足二叉搜尋樹的性質。

//4. 若每個節點本身和它的左右子樹都滿足這個性質,則該陣列可以轉換成一顆二叉搜尋樹。

public class solution else

}public boolean isbst(int seq, int start, int end)

int inx=seq[end], m=start;

//找到分界點

for(int i=end-1; i>=start; i--)

if(i == start)

}//分界點前的資料都小於根節點

for(int i=start; i<=m; i++)

}//分界點後的資料都大於根節點

for(int i=m+1; iif(iq[i]

return false;}}

//遞迴判斷根節點的左右子樹

return isbst(seq, start, m)&&isbst(seq, m+1, end-1);

}}

二叉搜尋樹的後序遍歷序列

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。解答 二叉搜尋樹後序遍歷最後訪問的是根節點,根據根節點將陣列分成兩部分,前面一部分即左子樹值小於根節點值,後面一部分即右子樹的值大於根節點 再遞迴的檢查...

二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。include using namespace std bool verifysquenceofbst int sequence,int length int j...

二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。class solution 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j0 left verifysquenceofbst lefttree...