輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
思路:1、判斷輸入為空、二叉樹只有左子樹、二叉樹只有右子樹的情況
2、使用index分割左右子樹
3、使用遞迴判斷左右子樹是否為後序遍歷
python實現:
// an highlighted block
# -*
- coding:utf-8-
*-class
solution
: def verifysquenceofbst
(self, sequence)
: # write code here
iflen(sequence)
<=0:
return false
root = sequence[-1
] length =
len(sequence)
ifmin
(sequence)
>root or max
(sequence)
return true #二叉樹只有乙個子樹的情況下是後序遍歷
index =
0for i in
range
(length-1)
: #用index分割左右子樹
index = i
if sequence[i]
> root:
break
#由於預設sequence[index]
>root所以可以從index+
1開始 for j in
range
(index+
1,length-1)
:if sequence[j]
< root:
return false
left = true
right = true
if index >
0: #存在左子樹,遞迴左子樹
left = self.
verifysquenceofbst
(sequence[
:index]
)if index < length-
1: #存在右子樹,遞迴右子樹
right = self.
verifysquenceofbst
(sequence[index:length-1]
)return left&right #只有當左右子樹都為後序遍歷時,結果為後序遍歷
舉例讓抽象問題具體化 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。public class solution return judge sequence,0,sequence.length 1 public boolean ju...
舉例讓抽象具體化 從上往下列印出二叉樹
從上往下列印出二叉樹的每個節點,同層節點從左至右列印。思路 使用佇列儲存,每次把佇列裡的原來內容進行出佇列操作。接下來把每個元素的非空左右子節點進入佇列。即可以得到每層的遍歷。python實現 an highlighted block from collections import deque cl...
劍指offer 舉例讓抽象具體化
問題描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的 min 函式 時間複雜度應為 o 1 注意 保證測試中不會當棧為空的時候,對棧呼叫 pop 或者 min 或者 top 方法。const datastack 棧 const minstack 儲存棧中最小的元素 functi...