劍指 面試題33 二叉搜尋樹的後序遍歷

2021-10-04 17:25:15 字數 1583 閱讀 5664

題目

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷結果。如果是則返回 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。假設輸入的陣列的任意兩個數字都互不相空間 思路 由於題目沒有給出二叉樹長什麼樣子,只給了乙個陣列,所以我們要從陣列中找到二叉搜尋樹後序序列的規律。後序序列的最後乙個元素是樹的根結點,因此...