二叉搜索树:任意节点,左子树所有的节点比根节点小,右子树的所有节点比根节点大。
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
1。后序遍历,先找到根节点,最后一个数
2.判断第一个数是否小于根节点,若是,说明有左子树,向后遍历,直到大于根节点,则为右子树的开始元素
3.继续遍历,若出现小于根节点的数,说明不是二叉搜索树,若没有,则调用递归,将储存的左子树和右子树分别调用该函数,当所 有递归完成,说明为二叉搜索树。
代码:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence)
{ int size=sequence.size();
if(size<=0)
return false;
int root=sequence[size-1]; //后序遍历最后一位是根节点的值
vector<int> leftseq;
vector<int> rightseq;
int i=0;
for(;i<size-1;i++)
{ leftseq.push_back(sequence[i]);
if(sequence[i]>root)
break;
}
int j=i;
for(;j<size-1;j++)
{
if(sequence[j]<root)
return false;
rightseq.push_back(sequence[j]);
}
VerifySquenceOfBST(leftseq);
VerifySquenceOfBST(rightseq);
return true;
}
};