輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後續遍歷的結果。
根據二叉搜尋樹的後續遍歷結果的特點來判斷:序列的最後乙個數是根結點,且前面一部分的數 < 最後乙個數,根結點之前的後一部分數 > 最後乙個數。
類似這樣的陣列:5,7,6,9,11,10,8
如果滿足上面的條件,然後再對兩部分進行遞迴判斷,否則直接返回false。
#include#include #includeusing namespace std;
//功能:判斷乙個序列是否是乙個二叉搜尋樹的後序遍歷序列,如序列:5,7,6,9,11,10,8
//思路:遞迴,根結點位於最後,前半段< 最後,中間半段》 最後
//注意:遞迴結束條件,只有乙個結點時返回真
bool verifysquenceofbst(int sequence , int length)
int j = i ;
for( ; j < length - 1 ; j++)
bool left = true;
if(i > 0)
left = verifysquenceofbst(sequence , i);
bool right = true;
if(i < length - 1)
right = verifysquenceofbst(sequence + i , length - i - 1);
return left && right;
}int main()
; cout<
來自class solution
int j = i;
for( ; j < len - 1 ; j++)
vector::iterator iter = sequence.begin() ;
bool left = true;
//如果i==0,則左子樹為空,此時不需要判斷左子樹
if(i > 0)
bool right = true;
//如果i==len-1,則右子樹為空,不再需要判斷右子樹
if(i < len - 1)
return left && right;
}};
劍指offer之二叉搜尋樹的後序遍歷序列 C
輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。二叉搜尋樹的特點就是永遠是左子樹 根 右子樹。看到二叉樹,首先想到的是遞迴,選擇了遞迴,那麼我們只要想好判斷根,左子樹,右子樹的條件就可以,後序遍歷,最後乙個必然...
劍指offer之二叉搜尋樹的後序遍歷序列
我這裡借鑑一位大佬的很奇妙的思路 遍歷的時候,如果遇到比最後乙個元素大的節點,就說明它的前面都比最後乙個元素小,該元素後面的所有值都必須大於最後乙個值,這兩個條件必須都要滿足。否則就說明該序列不是二叉樹後序遍歷。public boolean verifysquenceofbst int sequen...
劍指offer之二叉樹總結
會用遞迴了二叉樹的問題就會一大半了.一.用遞迴求解 對於要利用二叉樹的規律的題都可以利用它的左節點也是其左子樹的根節點的特性來遞迴求解。可以說那種引數有根節點的題一般都可以用遞迴來解決,來看看 劍指offer 中可用遞迴解決的題 1.根據前序遍歷的性質,第乙個元素必然就是root,那麼下面的工作就是...