劍指offer--二叉搜尋樹的後序遍歷序列
阿新 • • 發佈:2018-12-13
題目描述
輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
解析
每次判斷一個結點的左右子樹是否左邊全小於結點,右邊全大於結點,然後遞迴判斷兩個子節點的情況。
每次選擇的節點都是後序遍歷的最後一個結點,也就是根節點。
class Solution { public: void method(vector<int> sequence, bool& flag){ int length = sequence.size(); if(length==0 || length==1)return; int temp = sequence[length-1]; int f = 0,leftlength = -1; for(int i=0;i<length-1;i++){ if(sequence[i]>temp && f==0){ leftlength = i; f = 1; } if(f==1 && sequence[i]<temp){ flag = false; return; } } vector<int> left,right; if(leftlength==-1){//無右子樹 left.assign(sequence.begin(),sequence.end()-1); method(left, flag); }else if(leftlength==0){//無左子樹 right.assign(sequence.begin(),sequence.end()-1); method(right, flag); }else{ left.assign(sequence.begin(), sequence.begin()+leftlength); right.assign(sequence.begin()+leftlength+1, sequence.end()-1); method(left, flag); method(right, flag); } } bool VerifySquenceOfBST(vector<int> sequence) { if(sequence.size()==0)return false; bool result = true; method(sequence, result); return result; } };