題目:輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
class Solution:
def Binary_search_tree_subsequent_traversal(self, sequence):
# write code here
if not sequence or len(sequence) <= 0:
return False
root = sequence[-1]
i = 0
# 找出左小右大的分界點i,此時i屬於右子樹
for node in sequence[:-1]:
if node > root:
break
i += 1
# 如果在右子樹中有比根節點小的值,直接返回False
for node in sequence[i:-1]:
if node < root:
return False
# 判斷左子樹是否爲二叉搜索樹
left = True
if i > 0:
left = self.Binary_search_tree_subsequent_traversal(sequence[:i])
# 判斷右子樹是否爲二叉搜索樹
right = True
if i < len(sequence)-1:
right = self.Binary_search_tree_subsequent_traversal(sequence[i:-1])
return left and right
if __name__=="__main__":
list = [2,4,3,7,10,9,6]
solution = Solution()
a = solution.Binary_search_tree_subsequent_traversal(list)
print(a)