劍指offer(23 二叉搜尋樹的後序遍歷序列

2021-09-29 18:38:49 字數 965 閱讀 3430

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。

思路:後序遍歷即左右根,根據bst的特性,左子樹的每個節點都小於根節點,右子樹的每個幾點大於根節點。回到題目對於乙個陣列,最後乙個就是他的根節點,那我們從頭遍歷找到第乙個大於根節點的下標為索引 left,這樣left之前的陣列就是左子樹,left之後就是右子樹,然後再次遍歷即可。

talk is cheap.show code.

public

boolean

verifysquenceofbst

(int

sequence)

//當陣列長度為1時,代表是唯一節點,返回true即可

if(sequence.length ==1)

//根節點的值

int mid = sequence[sequence.length -1]

;//尋找左子樹的索引

int left =0;

for(

int i =

0; i < sequence.length -

1; i++)}

//後序遍歷無誤的話跳出for迴圈

break;}

}//若沒有找到left說明可能類似(6,3)這種情況即只有乙個右節點,做特殊處理即可

if(left ==0)

//繼續遍歷左子樹和右子樹

return

verifysquenceofbst

(arrays.

copyofrange

(sequence,

0, left))&&

verifysquenceofbst

(arrays.

copyofrange

(sequence, left, sequence.length -1)

);}

劍指offer 23 二叉搜尋樹的後續遍歷

程式設計資料獲取 codelab 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。我們先來了解一下什麼是二叉搜尋樹 二叉查詢樹 binarysearchtree 也稱為二叉搜尋樹 有序二叉樹或排序二叉樹是指一棵...

劍指offer 23 二叉搜尋樹的後序遍歷序列

輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同 二叉搜尋樹的性質 根節點大於左子樹所有元素,小於右子數的所有元素。那麼後序遍歷的話,最後乙個元素就為根節點root。那麼本題的思路如下 找到陣列中左右子樹的分界點...

劍指offer 23二叉搜尋樹的後序遍歷序列

題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。分析 後續遍歷要求左子樹大於根大於右子樹,陣列最後乙個元素為根。陣列前半段小於最後乙個元素,為左子樹 後半段大於最後乙個元素,為右子樹,否則返回fals...