- 题目:
二叉搜索树的后序遍历序列
- 剑指Offer上代码:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int length=sequence.size();
if(length<=0)
return false;
int root=sequence[length-1];
int i=0;
for(;i<length-1;i++){
if(sequence[i]>root)
break;
}
int j=i;
for(;j<length-1;++j){
if(sequence[j]<root)
return false;
}
bool left=true;
if(i>0){
vector<int>Left;
for(int k=0;k<i;k++)
Left.push_back(sequence[k]);//可进行优化
left=VerifySquenceOfBST(Left);
}
bool right=true;
if(i<length-1){
vector<int>Right;
for(int k=i;k<length-1;k++)
Right.push_back(sequence[k]);//可进行优化
right=VerifySquenceOfBST(Right);
}
return (left && right);
}
};
- 能在牛客网上AC代码:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int length=sequence.size();
if(length<=0)
return false;
int root=sequence[length-1];
int i=0;
for(;i<length-1;i++){
if(sequence[i]>root)
break;
}
int j=i;
for(;j<length-1;++j){
if(sequence[j]<root)
return false;
}
bool left=true;
if(i>0){
vector<int>Left;
for(int k=0;k<i;k++)
Left.push_back(sequence[k]);
left=VerifySquenceOfBST(Left);
}
bool right=true;
if(i<length-1){
vector<int>Right;
for(int k=i;k<length-1;k++)
Right.push_back(sequence[k]);
right=VerifySquenceOfBST(Right);
}
return (left && right);
}
};
- 总结:
首先是能够理解二叉搜索树的含义,然后按照定义能够写出代码,再进行递归便可进行求解。