题面
题解
对于二叉搜索树,我们知道,左子树的值都小于根节点,右子树的值都大于根节点,给出后序遍历,最后一个节点一定是根节点,然后从前向后,只要是小于根节点的点都是左子树中的,从前向后找第一个大于根节点的位置,就是右子树的开始,然后递归处理左右子树,看是否合法
代码
class Solution {
public:
bool dfs(vector<int> seq, int l, int r) {
if (l >= r) return true;
int root = seq[r];
int k = l;
while (k < r && seq[k] < root) k++;
for (int i = k; i < r; i++) {
if (seq[i] < root) {
return false;
}
}
return dfs(seq, l, k - 1) && dfs(seq, k, r - 1);
}
bool verifySequenceOfBST(vector<int> sequence) {
if (sequence.empty()) return true;
return dfs(sequence, 0, sequence.size() - 1);
}
};