第十八題 二叉搜尋樹的後序遍歷系列

2021-08-17 09:02:34 字數 1441 閱讀 9688

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

什麼是二叉搜尋樹?(參考:

二叉搜尋樹,也稱有序二叉樹,排序二叉樹,是指一棵空樹或者具有下列性質的二叉樹:

1. 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

2. 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

3. 任意節點的左、右子樹也分別為二叉搜尋樹。

4. 沒有鍵值相等的節點。

二叉搜尋樹的刪除:

具體實現過程解析:在後序遍歷得到的二叉搜尋樹序列中,最後乙個數字是樹的根節點的值,陣列中前面的數字可以分為兩部分:第一部分是左子樹節點的值,它們比根節點的值都小;第二部分是右子樹節點的值,它們比根節點的值都大。在處理一顆二叉樹的遍歷序列,可以先找到二叉樹的根節點,再基於根節點把整棵樹的遍歷序列拆分成左子樹對應的子串行和右子樹對應的子串行,接下來再用遞迴處理這兩個子串行。參考如下:

public class solution 

public boolean verifysquenceofbst(int sequence,int start,int end )

for(int j = i; j < end; j++)

return verifysquenceofbst(sequence, start, i-1)&&verifysquenceofbst(sequence, i, end-1);

}}/*

不通過您的**已儲存

答案錯誤:您提交的程式沒有通過所有的測試用例

case通過率為0.00%

測試用例:

[4,8,6,12,16,14,10]

對應輸出應該為:

true

你的輸出為:

false

*/

正確解答:

public class solution 

public boolean verifysquenceofbst(int sequence,int start,int end )

for(int j = i; j < end; j++)

return verifysquenceofbst(sequence, start, i-1)&&verifysquenceofbst(sequence, i, end-1);}}

二叉搜尋樹的後序遍歷

二叉搜尋樹的後序遍歷序列中,最後乙個值是根結點,前面比根節點小的是左結點,後面比根結點大的是右結點。include include bool verifysquenceofbst int sequence,int length int root sequence length 1 int i 0 在...

二叉搜尋樹的後序遍歷

描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷。如果是,則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。1 樣例輸入 5 7 6 9 11 10 8 1 樣例輸出 yes 2 樣例輸入 7 4 6 5 2 樣例輸出 no 首先要知道二叉搜尋樹的定義 或者是一棵空樹...

二叉搜尋樹的後序遍歷

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。思路採用遞迴方法 include include includeusing namespace std bool core vectorsequence,int ...