題目思路:輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相同。
(1)遞迴判斷左右子樹是不是二叉搜尋樹。
(2)輸入序列的最後乙個元素是二叉搜尋樹的根節點,前面的可分為左右子樹,其中左子樹小於根節點,右子樹大於根節點。
(3)先找到右子樹的第乙個元素,如果此後還有比根節點小的,返回false。
c++
class
solution
int j=i;
for(
;jsize()
-1;++j)
bool res_left =
true;if
(i>0)
res_left =
verifypostorder
(left)
;bool res_right =
true;if
(isize()
-1) res_right =
verifypostorder
(right)
;return
(res_left && res_right);}
};
python
class
solution
:def
verifypostorder
(self, postorder: list[
int])-
>
bool:if
len(postorder)==0
:return
true
root = postorder[-1
] i =
0 left =
right =
while i<
(len
(postorder)-1
):# i之前的為左子樹
if postorder[i]
>root:
break
) i +=
1 j = i
while j<
(len
(postorder)-1
):if postorder[j]
return
false
) j +=
1 left_res =
true
right_res =
true
if i:
left_res = self.verifypostorder(left)
if i <
(len
(postorder)-1
):right_res = self.verifypostorder(right)
return left_res and right_res
劍指offer面試題33二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。設計思想 序列的最後乙個元素一定是整棵樹的根節點,從序列開頭找第乙個大於根節點值的元素p val,該元素後邊直到末尾前乙個元素的元素值應該都大於p val 若p到...
劍指offer面試題24 二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則返回true,否則返回false。假設輸入的陣列的任意兩個數字都不相同。思路 陣列中左邊為小於根節點的部分,右邊大於根節點。include using namespace std bool issearchtree int...
面試題33 二叉搜尋樹的後序遍歷序列
題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 true,否則返回 false。假設輸入的陣列的任意兩個數字都互不相空間 思路 由於題目沒有給出二叉樹長什麼樣子,只給了乙個陣列,所以我們要從陣列中找到二叉搜尋樹後序序列的規律。後序序列的最後乙個元素是樹的根結點,因此...