您的位置:首页 > Web前端

剑指offer 编程题(22):二叉树后序遍历判断

2017-12-19 17:37 246 查看
题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

后序序列最后一个值为root;二叉搜索树左子树值都比root小,右子树值都比root大。

对于后序遍历来说,序列数组的最后一个元素一定是根节点,

则根据这个元素,将前面的数组分为左、右两个部分,左侧部分都小,右侧部分都大,如果右侧部分有比该根节点小的元素,那么就不是后序遍历,如此递归进行

BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。完美的递归定义 : ) 。

class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int sizeq = sequence.size();
if(sizeq == 0)
{
return false;
}
else if(sizeq == 1)
{
return true;
}
return search_seq(sequence,0,sizeq-1);
}

4000
bool search_seq(vector<int> s,int start,int end)
{
if(start > end)
{
return true;
}
int i = start;
while(s[i] < s[end])
{
++i;
}
for(int j=i;j<end;j++)
{
if(s[j] < s[end])
{
return false;
}

}
return search_seq(s,0,i-1) && search_seq(s,i+1,end-1);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐