您的位置:首页 > Web前端

剑指offer---二叉搜索树的后序遍历序列

2017-09-29 16:12 309 查看


题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解析:
递归:数组最后一个元素是根节点,从第一个元素开始向后遍历直到找到第一个大于根节点值的元素,设该位置为i,从该元素到根节点的前一个元素(i:end-1),若都大于根节点返回true,同样方法递归数组(i:end-1)和数组(begin:i-1),若都返回true,则该数组为二叉搜索树的后序遍历序列。
代码:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
return bst(sequence,0,sequence.size()-1);
}
bool bst(vector<int> sequence,int begin,int end){
if(sequence.size()==0||begin>end)
return false;
int root=sequence[end];
int i=begin;
for(;i<end;i++){
if(sequence[i]>root)
break;
}
for(int j=i;j<end;j++){
if(sequence[j]<root)
return false;
}
bool left=true;
if(i>begin)
left=bst(sequence,begin,i-1);
bool right=true;
if(i<end)
right=bst(sequence,i,end-1);
return left&&right;
}
};


非递归:

代码:
bool VerifySquenceOfBST(vector<int> sequence) {//非递归
if(sequence.size()==0)
return false;
int size=sequence.size();
int i=0;
while(--size){
while(sequence[i++]<sequence[size]);
while(sequence[i++]>sequence[size]);
if(i<size)
return false;
i=0;
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: