boolVerifySquenceOfBST(vector<int> sequence){ if (sequence.empty()) returnfalse; //先判断给出的序列是否为空 vector<int> left_seq; vector<int> right_seq; int root_val = sequence.back(); int i=0; //在for循环的外部定义i for (; i<sequence.size()-1; i++) { if (sequence[i] < root_val) left_seq.push_back(sequence[i]); elsebreak; } for (; i<sequence.size()-1; i++) { if (sequence[i] < root_val) returnfalse; right_seq.push_back(sequence[i]); } bool left = true; if (!left_seq.empty()) left = VerifySquenceOfBST(left_seq); bool right = true; if (!right_seq.empty()) right = VerifySquenceOfBST(right_seq); return left && right; }
法二:不需要定义辅助数组,直接记录左右子树的起始位置和终止位置即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
boolVerifySquenceOfBSTHelper(vector<int> &seq, int start, int end){ if (seq.empty()) returnfalse; if (start >= end) returntrue; // 等效于 if (start > end) {} else return true int root_val = seq.back(); int i=0; for (; i<end; i++) { if (seq[i] > root_val) break; } for (int j=i; j<end; j++) if (seq[j] < root_val) returnfalse; returnVerifySquenceOfBSTHelper(seq, 0, i-1) && VerifySquenceOfBSTHelper(seq, i, end-1); } boolVerifySquenceOfBST(vector<int> sequence){ returnVerifySquenceOfBSTHelper(sequence, 0, sequence.size()-1); }