【劍指Offer】23二叉搜尋樹的後序遍歷序列
阿新 • • 發佈:2018-11-11
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
時間限制:1秒;空間限制:32768K
解題思路
BST後序遍歷的特點是:
大小:L樹 < Root <R樹
排序:L樹 -- R樹 -- Root
因此如果一個序列是合法的BST的後序序列,那麼滿足以下條件:
1、最後一個元素是根節點root
2、root前面的序列可以分為兩段:前一段序列是左子樹,值都小於root值;後一段序列是右子樹,值都大於root值
3、這兩段序列也都是合法的BST的後序序列
可以用遞迴的思路求解本題,Python程式碼:
# -*- coding:utf-8 -*- class Solution: def VerifySquenceOfBST(self, sequence): # write code here if sequence == None or sequence == []: return False root = sequence[-1] length = len(sequence) # 在二叉搜尋樹中左子樹節點小於根節點 for i in range(length): if sequence[i]>root: break # 二叉搜尋樹中右子樹的節點都大於根節點 for j in range(i,length-1): if sequence[j]<=root: return False # 判斷左子樹是否為二叉樹 left = True if i>0: left = self.VerifySquenceOfBST(sequence[0:i]) # 判斷右子樹是否為二叉樹 right = True if i<length-1: right = self.VerifySquenceOfBST(sequence[i:-1]) # 當左右兩子樹都返回True的時候,結果才是True return left and right