題目描述
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
解題思路
遞迴解法
樹的後序遍歷方式是左右根,比如對於遍歷序列
[4,8,6,12,16,14,10]那麼就可以知道10就是根節點,前面的左子樹和右子樹需要進一步判斷。
二叉平衡樹的條件是左子樹全部小於根結點,右子樹全部大於根節點。對於上述序列,首先找到根節點10,然後從頭開始遍歷,找到第乙個大於10的下標,然後從下標開始到最後的切片序列應該全部大於10,如果乙個不滿足,就返回false,然後遞迴對兩邊子樹做相同的操作。
class solution:def verifysquenceofbst(self, sequence):
if not sequence:
return false
root = sequence[-1]
i = 0
while i < len(sequence) - 1:
if sequence[i] > root:
break
i += 1
for j in range(i, len(sequence) - 1):
if sequence[j] < root:
return false
#由於函式中只有返回false的條件判斷,因此首先得將left和right都賦值為true,不然後面不管任何條件全是false
left = true; right = true
if i > 0:
left = self.verifysquenceofbst(sequence[:i])
if i < len(sequence) - 1:
right = self.verifysquenceofbst(sequence[i: len(sequence) - 1])
return left and right
s = solution()
print(s.verifysquenceofbst([4,8,6,12,16,14,10]))
JZ23 劍指offer 二叉搜尋樹的後序遍歷序列
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。class solution bool dfs vector int s,int st,int en for int j i j j retur...
JZ23 二叉搜尋樹的後序遍歷
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。解 該題目首先需要清楚二叉搜尋樹的概念,二叉搜尋樹 左子樹小於根節點,右子樹大於根節點 然後就是清楚後續遍歷的概念 左子樹 右子樹 根節點 那麼...
JZ23 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。ps 我們約定空樹不是二叉搜尋樹 輸入 4,8,6,12,16,14,10 返回值 true 就是根據二叉樹後序遍歷結果判斷是不是 bst。結合他倆的特點...