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

2021-09-14 08:23:14 字數 1241 閱讀 6395

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

後序遍歷序列最後乙個元素為根節點,前面元素中小於根節點值的為左子樹,大於根節點值的為右子樹,再在左子樹中找到最後乙個元素為左子樹的根節點,繼續分成左右子樹,使用遞迴方法。

例如:最後乙個元素4為根節點,小於其為左子樹,大於為右子樹

後序遍歷序列:,,4

[4]

[2]   [6]

[1] [3] [5] [7]

左子樹繼續上述過程,最後乙個元素為2,小於其為左子樹,大於為右子樹

後序遍歷序列:,,2

[4][2]   [6]

[1] [3] [5] [7]

右子樹繼續上述過程,最後乙個元素為6,小於其為左子樹,大於為右子樹

後序遍歷序列:,,6

[4][2]   [6]

[1] [3] [5] [7]

不能繼續下分,則該陣列為後序遍歷序列

public

class

solution

return

verifysquenceofbstcore

(sequence,

0, sequence.length -1)

;}private

boolean

verifysquenceofbstcore

(int

sequence,

int start,

int end)

int i = start;

// 在陣列中找到第乙個比根節點值大的元素,為左右子樹分界元素

for(

; i < end; i++)}

// 遍歷右子樹,如果發現小於根節點值的元素則返回false

for(

int j = i; j < end; j++)}

// 在左右子樹中遞迴上述操作

return

verifysquenceofbstcore

(sequence, start, i -1)

&&verifysquenceofbstcore

(sequence, i, end -1)

;}}

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

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

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

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

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

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