输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回 t r u e true true,否则返回 f a l s e false false。
假设输入的数组的任意两个数字都互不相同。
数据范围
数组长度 [ 0 , 1000 ] [0,1000] [0,1000]。
样例
输入:[4, 8, 6, 12, 16, 14, 10]
输出:true
题目分析:
题中说是判断一个数组是否为一个二叉搜索树的后序遍历,那我们就要从二叉搜索树的性质入手,左儿子小于根节点,右儿子大于等于根节点。然后我们划分这个后序遍历,最后一个节点为根节点,然后从这个序列中从前到后遍历出小于root的前k个值,然后判断后
k
<
=
i
<
=
r
−
1
k <= i <= r-1
k<=i<=r−1中元素是否符合二叉搜索树的性质,然后递归左右子树,当最后只剩单个元素时,就满足了要求
代码如下:
class Solution {
public:
vector<int> seq;
bool verifySequenceOfBST(vector<int> sequence) {
seq = sequence;
return dfs(0, seq.size() - 1);
}
bool dfs(int l, int r)
{
if(l >= r) return true;
int k = l, root = seq[r];
while(seq[k] < root && k < r) k ++;
for(int i = k; i < r; i ++)
{
if(seq[i] < root) return false;
}
return dfs(l, k - 1) && dfs(k , r - 1);
}
};