题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思想:递归
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence)
{
int length = sequence.size();
if (!length)
return false;
//最后一个为根节点
int root = sequence[length - 1];
//在二叉搜索树中 左子树的结点 < 根节点,//5 7 6 9 11 10 8
vector<int>vLeft;
int i = 0;
for (; i < length - 1; i++)
{
if (sequence[i] > root)
break;
else
vLeft.push_back(sequence[i]);//5 7 6
}
//在二叉搜索树中 右子树的结点 > 根节点,//5 7 6 9 11 10 8
vector<int>vRight;
int j = i;
for (; j < length - 1; j++)
{
if (sequence[j] < root)
return false;
else
vRight.push_back(sequence[j]);// 9 11 10
}
//判断左子树是不是二叉搜索树
bool left = true;
if (i > 0)
left = VerifySquenceOfBST(vLeft);
//判断右子树是不是二叉搜索树
bool right = true;
if (i<length - 1)
right = VerifySquenceOfBST(vRight);
return(left&&right);
}
};