24二叉搜尋樹的後序遍歷python
阿新 • • 發佈:2019-01-24
題目:輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出True否則輸出False。假設輸入的陣列的任意兩個數字都互不相同。
思路:1、判斷輸入為空、二叉樹只有左子樹、二叉樹只有右子樹的情況
2、使用index分割左右子樹
3、使用遞迴判斷左右子樹是否為後序遍歷
class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if len(sequence) <= 0:
return False
root = sequence [-1]
length = len(sequence)
if min(sequence)>root or max(sequence)<root:
return True #二叉樹只有一個子樹的情況下是後序遍歷
index = 0
for i in range(length-1): #用index分割左右子樹
index = i
if sequence[i] > root:
break
#由於預設sequence [index]>root所以可以從index+1開始
for j in range(index+1 ,length-1):
if sequence[j] < root:
return False
left = True
right = True
if index > 0: #存在左子樹,遞迴左子樹
left = self.VerifySquenceOfBST(sequence[:index])
if index < length-1 : #存在右子樹,遞迴右子樹
right = self.VerifySquenceOfBST(sequence[index:length-1])
return left&right #只有當左右子樹都為後序遍歷時,結果為後序遍歷