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

2021-10-22 06:23:06 字數 2504 閱讀 4569

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都互不相同。(ps:我們約定空樹不是二叉搜素樹)

輸入:[4,8,6,12,16,14,10]

輸出:true

思路一:二叉搜尋樹中左子樹的節點的值小於根節點的值小於右子樹的節點的值

class

solution

:def

verifysquenceofbst

(self, sequence)

:# write code here

if sequence ==

none

orlen

(sequence)==0

:return

false

length =

len(sequence)

root = sequence[length-1]

for i in

range

(length)

:#樹中左子樹節點小於根節點

if sequence[i]

> root:

break

for j in

range

(i+1

,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

])return left and right

思路二:增加helper函式是因為對於遞迴來說sequence為空可以作為終止條件

class

solution

:def

verifysquenceofbst

(self, sequence)

:# write code here

ifnot sequence:

return

false

return self.helper(sequence)

defhelper

(self,sequence):if

not sequence:

return

true

root = sequence[-1

]for i in

range

(len

(sequence)):

if sequence[i]

> root:

break

for right in sequence[i:-1

]:if right < root:

return

false

return self.helper(sequence[

:i])

and self.helper(sequence[i:-1

])

思路三:暴力解法

class

solution

:def

verifysquenceofbst

(self, sequence)

:# write code here

size =

len(sequence)

if size ==0:

return

false

size -=

1 index =

0while size:

while index < size and sequence[index]

< sequence[size]

: index+=

1while index < size and sequence[index]

> sequence[size]

: index+=

1if index < size :

return

false

index =

0 size-=

1return

true

注:思路一和思路二中第乙個for迴圈為什麼要判斷root,不應該是range(length-1)嗎

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

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。author zy date 2017年10月13日 下午9 34 21 decription 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如...

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

時間限制 1秒 空間限制 32768k 熱度指數 524747 本題知識點 棧 樹輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。這兩天狀態不行,沒多大刷題的動力。菜還不想動,說的大概就是我了。遞迴 大佬的思路...

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

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。簡單思路 二叉搜尋樹 1.左孩子 根 右孩子 2.bst的左孩子和右孩子都是bst 發現對於每一棵子樹,它的根結點總是對應該子樹的後序序列的最後乙個數 ...