劍指 JZ23二叉搜尋樹的後序遍歷序列

2021-10-07 12:34:19 字數 1135 閱讀 4484

題目描述

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出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。結合他倆的特點...