輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。例如返回true;而返回false。
二叉搜尋樹:樹中沒有值相同的兩個節點,對於每乙個節點,它左邊所有節點都比它小,右邊所有節點都比它大。
本題的關鍵在於找到後序遍歷的規律。在後序遍歷得到的序列中,最後乙個數字是樹的根節點的值。陣列中前面的數字可以分為兩部分:第一部分是左子樹節點的值,它們都比根節點的值小;第二部分是右子樹節點的值,它們都比根節點的值大。因此,是乙個遞迴過程。
如果面試題要求處理一棵二叉樹的遍歷序列,則可以先找到二叉樹的根節點,再基於根節點把整棵樹的遍歷序列拆分成左子樹對應的子串行和右子樹對應的子串行,接下來再遞迴地處理這兩個子串行。本題和劍指04「重建二叉樹」都是這種思路。
publicclass
solution
private
boolean helpverify(int sequence,int start,int
end)
for (int j = i; j < end; j++)
return helpverify(sequence,start,i-1) && helpverify(sequence,i,end-1);
}}
note: 要考慮到子樹為空的特殊情況。
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的前序遍歷結果。 這和前面問題的後序遍歷很類似,只是在前序遍歷得到的序列中,第乙個數字是根節點的值。
23 劍指offer 二叉搜尋樹的後序遍歷序列
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。解題思路 本題中的樹為二叉搜尋樹,滿足左 根 右 1 求出陣列最後乙個元素,為根節點 2 遍歷,將所有連續小於sequence n 1 的存入vecto...
劍指offer 23 二叉搜尋樹的後序遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同 二叉搜尋樹的性質 根節點大於左子樹所有元素,小於右子數的所有元素。那麼後序遍歷的話,最後乙個元素就為根節點root。那麼本題的思路如下 找到陣列中左右子樹的分界點...
劍指offer 23二叉搜尋樹的後序遍歷序列
題目描述 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。分析 後續遍歷要求左子樹大於根大於右子樹,陣列最後乙個元素為根。陣列前半段小於最後乙個元素,為左子樹 後半段大於最後乙個元素,為右子樹,否則返回fals...