【劍指offer】二叉搜尋樹的後序遍歷
阿新 • • 發佈:2018-11-26
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
二叉搜尋樹是左子樹都比跟小,右子樹都比跟大
陣列的最後一個數字為root,然後一串比root小的為左子樹,一串比root大的為右子樹,當右子樹中有比root小的返回false,可以用遞迴的方式判斷左子樹和右子樹
class Solution:
def VerifyCore(self, sequence, start, end):
#print(start, end)
if start == end:
return True
root = sequence[end]
for i in range(start, end + 1):
if sequence[i] > root:
break
for j in range(i, end + 1):
if sequence[j] < root:
return False
left = right = True
if i > start:
left = self.VerifyCore(sequence, start, i - 1)
if i < end - 1:
right = self.VerifyCore(sequence, i, end - 1)
return left and right
def VerifySquenceOfBST(self, sequence):
# write code here
if sequence == []:
return False
return self.VerifyCore(sequence, 0, len(sequence) - 1)
sequence = [7,4,6,5]
print(Solution().VerifySquenceOfBST(sequence))