剑指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; }
相关文章推荐
- 剑指Offer—23—二叉搜索树的后序遍历序列
- 剑指offer(12)-二叉搜索树的后序遍历序列
- 剑指Offer:面试题24——二叉搜索树的后序遍历序列(java实现)
- 剑指offer:二叉搜索树的后序遍历序列
- 《剑指Offer》读书笔记---面试题24:二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列(剑指offer)
- 剑指offer:二叉搜索树的后序遍历序列(java)
- 二叉搜索树的后序遍历序列(剑指offer)
- 剑指offer——二叉搜索树的后序遍历序列(思路不错)
- 剑指offer-----二叉搜索树的后序遍历序列
- 《剑指offer》编程题java实现(二十七):二叉搜索树的后序遍历序列
- 剑指offer面试题24 二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 《剑指offer》——二叉搜索树的后序遍历序列
- 剑指Offer—编程题24(二叉搜索树的后序遍历序列)
- 剑指offer——判断一个序列是否为二叉搜索树的后序遍历
- 剑指offer——二叉搜索树的后序遍历序列
- 《剑指offer》刷题笔记(举例让抽象具体化):二叉搜索树的后序遍历序列
- 剑指offer系列源码-二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列(递归与非递归)