题目描述
输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
考察点:二叉搜索树的特点;后序遍历的规律
思路:把复杂问题简化,找到数字之间规律,递归求解子问题。
bool VerifySquenceOfBST(vector<int> sequence)
{
if (sequence.empty())
return false;
vector<int> left;
vector<int> right;
int root = sequence[sequence.size() - 1];//获取跟节点
int i = 0;
for (; i < sequence.size() - 1; i++)//判断入栈
{
if(sequence[i] < root)
left.push_back(sequence[i]);
else
break;
}
int j = i;
for (; j < sequence.size() - 1; j++)//判断入栈
{
if (sequence[j] > root)
right.push_back(sequence[j]);
else
return false;
}
bool le = true;
bool ri = true;
if(i>0)//确认有左孩子
le = VerifySquenceOfBST(left);
if(i<sequence.size()-1)//确认有右孩子
ri = VerifySquenceOfBST(right);
return(le && ri);
}
本文探讨了如何判断一个整数数组是否为二叉搜索树的后序遍历结果。通过分析二叉搜索树特性及后序遍历规律,采用递归算法解决这一问题,提供了一个清晰的实现思路。
642

被折叠的 条评论
为什么被折叠?



