剑指offer---二叉搜索树的后序遍历序列
来源:互联网 发布:centos怎么修改语言 编辑:程序博客网 时间:2024/06/05 18:09
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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; }};
非递归:
基于递归的思想:
//左子树一定比右子树小,因此去掉根后,数字分为left,right两部分,right部分的
//最后一个数字是右子树的根他也比左子树所有值大,因此我们可以每次只看右子树是否符合条件
//即可,即使到达了左子树左子树也可以看出由左右子树组成的树还像右子树那样处理
//对于左子树回到了原问题,对于右子树,左子树的所有值都比右子树的根小可以暂时把他看出右子树的左子树,
只需看看右子树的右子树是否符合要求即可例如:对于后序遍历序列18,28,32,30,20,38,40,37,36(0:8),长度为9.该树的根节点为36(i=8),左子树(0:4),右子树(5:7),第一次判断,
只需从左到右遍历数组0:8,前部分都小于最后一个数且后部分都大于最后一个数,则继续遍历数组0:7进行判断,若都是前部分都小于最后一个数且后部分
都大于最后一个数,则该数组为二叉搜索树的后序遍历序列。
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; }
阅读全文
0 0
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- Android 悬浮窗权限各机型各系统适配大全
- 使用handbars显示
- 能整除数组个数的数组下表
- 1965: [Ahoi2005]SHUFFLE 洗牌
- poj2065-SETI
- 剑指offer---二叉搜索树的后序遍历序列
- OC最实用的runtime总结,面试、工作你看我就足够了!
- 自己搭建一个Maven项目
- 图片铺满整个页面
- c++基础(2)
- c# json在序列化时出现的问题
- 换肤框架学习总结
- Spring基础知识梳理
- HDU Cactus 3594 仙人掌图