劍指offer33--二叉搜尋樹的後序遍歷序列
阿新 • • 發佈:2018-12-31
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
思路:
遞迴
注意點:
- while可以保證i加一次
- for迴圈保證精確break
- 但是在這個題目,應該要保證加一次for(int i=left;i<=right;i++)//這裡應該是<=right,見上文注意點
eg: 4675
0,3-------------0,0-----------------1,2(這裡midd不會變,其實是左子樹,右子樹沒字元)以為是右子樹,然後導致return fasle - if(left>=right) return true;//這裡必須>=比如2,3,右子樹左右係數為1,0
class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { int len=sequence.size(); if(len==0) return false; if(len==1) return true; return VerifyCore(sequence,0,len-1); } bool VerifyCore(vector<int>& sequence,int left,int right) { int midd=left; if(left>=right) return true;//這裡必須>=比如2,3,右子樹左右係數為1,0 for(int i=left;i<=right;i++)//這裡應該是<=right,見上文注意點 { if(sequence[i]>=sequence[right]) { midd=i; break; } } for(int i=midd;i<=right;i++) if(sequence[i]<sequence[right]) return false; return VerifyCore(sequence,left,midd-1)&&VerifyCore(sequence,midd,right-1); } };