輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。
二叉搜尋樹的特點就是永遠是左子樹《根《右子樹。看到二叉樹,首先想到的是遞迴,選擇了遞迴,那麼我們只要想好判斷根,左子樹,右子樹的條件就可以,後序遍歷,最後乙個必然是根,所以當遍歷序列為空時為假無疑問,但遍歷序列長度為1和2時必然也可以畫出相應的二叉搜尋樹,所以可直接判定為真,當序列長度大於等於3時,則分為3種情況:二叉樹只有左子樹[1,2,3,4,5],二叉樹只有右子樹[2,3,4,5,1],既有左子樹又有右子樹[1,2,4,5,3],分類判定。進行變數命名時還是要有明顯的區分,這道題困擾了我三天,到最後結果就是l錯寫成了r。
class
solution
else
if(sequence.
size()
==1|| sequence.
size()
==2)else
}return
verifysquenceofbst
(sequencer);}
else
if(sequence[sequence.
size()
-2]< root)
}return
verifysquenceofbst
(sequencel);}
else
}for
(int j =
0; j<= index;j++)}
for(
int k = index+
1; ksize()
-1; k++)}
return
verifysquenceofbst
(sequencel)
&&verifysquenceofbst
(sequencer);}
}}};
劍指Offer之 二叉搜尋樹的後續遍歷序列
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後續遍歷的結果。根據二叉搜尋樹的後續遍歷結果的特點來判斷 序列的最後乙個數是根結點,且前面一部分的數 最後乙個數,根結點之前的後一部分數 最後乙個數。類似這樣的陣列 5,7,6,9,11,10,8 如果滿足上面的條件,然後再對兩部分進行遞迴判斷,否則直...
劍指offer之二叉搜尋樹的後序遍歷序列
我這裡借鑑一位大佬的很奇妙的思路 遍歷的時候,如果遇到比最後乙個元素大的節點,就說明它的前面都比最後乙個元素小,該元素後面的所有值都必須大於最後乙個值,這兩個條件必須都要滿足。否則就說明該序列不是二叉樹後序遍歷。public boolean verifysquenceofbst int sequen...
劍指offer之二叉樹總結
會用遞迴了二叉樹的問題就會一大半了.一.用遞迴求解 對於要利用二叉樹的規律的題都可以利用它的左節點也是其左子樹的根節點的特性來遞迴求解。可以說那種引數有根節點的題一般都可以用遞迴來解決,來看看 劍指offer 中可用遞迴解決的題 1.根據前序遍歷的性質,第乙個元素必然就是root,那麼下面的工作就是...