bool verifySequenceOfBST(vector<int>& sequence, int start, int end){ if (start >= end) return true; int rootval = sequence[end]; int index = findFitstMoreThanToot(sequence, start, end - 1, rootval); bool flag = verifyMoreThanToot(sequence, index, end - 1, rootval); if (flag == false){ return false; } flag = verifySequenceOfBST(sequence, start, index - 1); if (flag == false){ return false; } flag = verifySequenceOfBST(sequence, index, end - 1); return flag; }
/******************* 参考代码 ******/ bool verifySequenceOfBST(int sequence[], int length) { if (sequence == NULL || length <= 0) { return false; } int root = sequence[length - 1]; // 在二叉搜索树中,左子树节点下于根节点 int i = 0; for (; i < length - 1; ++i) { if (sequence[i] > root) { break; } } // 在二叉搜索树中,右子树的节点大于根节点 int j = i; for (; j < length - 1; ++j) { if (sequence[j] < root) { return false; } } // 判断左子树是不是二叉搜索树 bool left = true; if (i > 0) { left = verifySequenceOfBST(sequence, i); } // 判断右子树是不是二叉搜索树 bool right = true; if (i < length - 1) { right = verifySequenceOfBST(sequence + i, length - i - 1); } return (left && right); }
bool verifySequenceOfBST(vector<int>& sequence){ return verifySequenceOfBST(sequence, 0, sequence.size() - 1); }