#輸入乙個整數陣列,判斷該陣列是否是某二叉搜尋樹的後序遍歷結果
#注:二叉搜素樹的左子樹結點小於根結點 右子樹結點大於根結點
#思路:可以先找到二叉樹的根結點,在基於根結點把整顆樹的遍歷序列拆分成左子樹對應的子串行和右子樹對應的子串行,在遞迴處理這兩個子串行
defsequence
(arr):if
len(arr)==0
:return
false
#後序遍歷,最後乙個數是根結點 ==>左-右-根
root = arr[-1
] length =
len(arr)
index =
0#從頭開始遍歷判斷左子樹
for i in
range
(length-1)
: index = i
if arr[i]
> root:
break
#判斷右子樹 從+1開始是因為預設在index時候值已經大於root了,肯定屬於右子樹了
for i in
range
(index+
1,length-1)
:if arr[i]
< root:
return
false
#遞迴驗證左右子樹是否都是二叉搜尋樹
left =
true
if index >0:
left = sequence(arr[
:index]
) right =
true
if index < length-1:
right = sequence(arr[index:length-1]
)return left and right
array =[7
,4,6
,5,9
,11,10
,8]print
(sequence(array)
)#相關:判斷陣列是否是前序遍歷的結果
defsequence1
(arr):if
len(arr)==0
:return
false
#前序遍歷,第乙個是根結點 ==>根-左-右
root = arr[0]
length =
len(arr)
index =
1#從第二個元素開始遍歷判斷左子樹
for i in
range
(index,length)
: index = i
if arr[i]
> root:
break
#判斷右子樹 從1開始是因為預設在index時候值已經大於root了,肯定屬於右子樹了
for i in
range
(index+
1,length-1)
:if arr[i]
< root:
return
false
#遞迴驗證左右子樹是否都是二叉搜尋樹
left =
true
if index >1:
left = sequence1(arr[
1:index]
) right =
true
if index < length:
right = sequence1(arr[index:length]
)return left and right
array1 =[8
,4,7
,3,5
,9,11
,10]print
(sequence1(array1)
)
二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。解答 二叉搜尋樹後序遍歷最後訪問的是根節點,根據根節點將陣列分成兩部分,前面一部分即左子樹值小於根節點值,後面一部分即右子樹的值大於根節點 再遞迴的檢查...
二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。include using namespace std bool verifysquenceofbst int sequence,int length int j...
二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。class solution 在二叉搜尋樹中右子樹的結點大於根結點 int j i for j0 left verifysquenceofbst lefttree...