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