题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
本题知识点:
栈 树
解题思路:
二叉树后序遍历的特点是最后一个值是二叉树的根结点,根结点的左子树全部小于根结点的值,右子树全部大于根结点的值。根据根结点的值遍历数组,分割出左子树和右子树,再通过分别递归判断左子树和右子树。
代码:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int length = sequence.size();
if(length == 0)
return false;
int root = sequence[length - 1];
vector<int> small, big;
int i, j;
for(i = 0; i < length;i++)
{
if(sequence[i] < root)
small.push_back(sequence[i]);
else
break;
}
for(j = i; j < length - 1; j++)
{
if(sequence[j] > root)
big.push_back(sequence[j]);
else
return false;
}
bool left = true;
if(i > 0)
left = VerifySquenceOfBST(small);
bool right = true;
if(i < length - 1)
right = VerifySquenceOfBST(big);
return left && right;
}
};