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

2021-08-26 18:09:11 字數 1156 閱讀 1199

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

ps:二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹:

(1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值;

(2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值;

(3)左、右子樹也分別為二叉排序樹(所以可以遞迴判斷);

特點:左子樹結點的值都小於根節點的值,右子樹結點的值都大於根節點的值

後序遍歷:先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根節點

所以,後序遍歷序列的最後乙個值一定是根節點的值。

序列中最後乙個數前面的數可以分為兩部分:

一部分是左子樹節點的值,它們都比根節點的值小;

第二部分是右子樹節點的值,它們都比根節點的值要大。

用遞迴的方法分別判斷這兩部分是否滿足前面說的條件

class

solution:

defverifysquenceofbst

(self, sequence):

# write code here

if len(sequence)==0:

return

false

root = sequence[-1]

i = 0

for node in sequence[:-1]:

if node > root:

break

i += 1

for node in sequence[i:-1]:

if node < root:

return

false

left = true

if i > 1:

left = self.verifysquenceofbst(sequence[:i])

right = true

if i < len(sequence) - 2

and left:

right = self.verifysquenceofbst(sequence[i+1:-1])

return left and right

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

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回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...