輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回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 發現對於每一棵子樹,它的根結點總是對應該子樹的後序序列的最後乙個數 ...