输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解析: 左子树的所有节点都小于根节点,右子树的所有节点都大于根节点。而根节点位于数组的末端.所以可以利用递归求解本题。
牛客网AC代码如下:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0)
return false;
int midNum = sequence[sequence.size()-1];
int i,j;
vector<int> v1,v2;
for(i=0;i<sequence.size()-1;i++)//左子树节点值小于根节点的值
if(sequence[i] > midNum){
break;
}else
v1.push_back(sequence[i]);
for(int j=i;j<sequence.size()-1;j++)//右子树节点值大于根节点的值
if(sequence[j] < midNum){
return false;
}else
v2.push_back(sequence[j]);
bool left = true;
if(!v1.empty())//判断左子树是不是二叉搜索树
left = VerifySquenceOfBST(v1);
bool right = true;
if(!v2.empty())//判断右子树是不是二叉搜索树
right = VerifySquenceOfBST(v2);
return left && right;
}
};