本题来自《剑指offer》 二叉搜索树的后序遍历序列

题目:

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

思路:

  对二叉搜索树有个明确的概率,即左节点小于根节点,右节点大于根节点。

  后序遍历是左友根遍历。

  首先找到根节点,那么根节点左序列为左子树,右序列为右子树。以此递归。

Python Code:

  1. # -*- coding:utf-8 -*-
  2. class Solution:
  3. def VerifySquenceOfBST(self, sequence):
  4. # write code here
  5. if not sequence: #边界条件
  6. return False
  7. return self.VerifyBST(sequence) #调用二叉搜索树验证程序
  8. def VerifyBST(self,sequence):
  9. if not sequence: #如果切割到最后为空,则说明为True
  10. return True
  11. root = sequence.pop() #最后一个元素是根节点
  12. index = self.FindIndex(sequence,root) #找到下标,即左子树小于根节点,右子树大于根节点
  13. if self.VerifyRight(sequence[index:],root):
  14. left = sequence[:index] #分割此中间值下,左子树为从头到下标
  15. right = sequence[index:] #分割从中间值到末尾
  16. return self.VerifyBST(left) and self.VerifyBST(right) #分别对左右子树递归进行遍历
  17. return False
  18. def VerifyRight(self,sequence,target): #验证该序列中的元素与目标值的关系
  19. if not sequence:
  20. return True
  21. return min(sequence) > target #返回真假,如果最下的值大于目标返回真,否则返回假
  22. def FindIndex(self,sequence,target): #给定一个数组,返回元素的下标
  23. for i ,num in enumerate(sequence): #枚举全部的元素,包括下标和元素值
  24. if num > target: #直到大于目标值的即可
  25. return i
  26. return len(sequence) #如果没有找到,那么就是最后一个元素

总结:

  明确定义,画图,手动推理找规律。

《剑指offer》二叉搜索树的后序遍历序列的更多相关文章

  1. 剑指Offer 二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同.   思路: 后续遍历数组的尾部为根节点,前面的部分 ...

  2. 剑指Offer——二叉搜索树的后序遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...

  3. [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)

    ①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...

  4. 用js刷剑指offer(二叉搜索树的后序遍历序列)

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 牛客网链接 js代码 function Verif ...

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

    正常情况下,因为二叉搜索树,左子树所有结点比根小,右子树所有结点比根大,所以循环一遍就能结束 ----------------------------------------------------- ...

  6. 剑指Offer-23.二叉搜索树的后序遍历序列(C++/Java)

    题目: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉树的后序遍历也就是先访问左子树,再访问右 ...

  7. 剑指offer24 二叉搜索树的后序遍历序列

    自己写的更简洁的代码 class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { int length ...

  8. 剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列

    剑指Offer - 九度1367 - 二叉搜索树的后序遍历序列2013-11-23 03:16 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出 ...

  9. 剑指Offer:二叉搜索树的后序遍历序列【33】

    剑指Offer:二叉搜索树的后序遍历序列[33] 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ...

随机推荐

  1. spring boot 与 spring cloud 关系

    公司使用spring cloud,所以稍微了解一下 看了一下spring官网对 spring boot 以及 spring cloud 的解释 Spring Boot Spring Boot make ...

  2. ieda 运行web--导入其它jar包

    == 配置 或选择tomcat 1.打开IntelliJ IDEA,点击菜单的“Run”->“Edit Configurations...”,然后会打开运行设置弹框.2.在弹框中,点击左上角的“ ...

  3. div与 css--绝对定位和相对定位

    <10-页面美化专题-div和css基础.avi> Border-topPadding-topMargin-topFloat Position #clear{Both:clear;}//浮 ...

  4. Android RecyclerView 瀑布流滑动到最后自动加载更多

    mRecycleView.setOnScrollListener(new RecyclerView.OnScrollListener(){ //用来标记是否正在向最后一个滑动,既是否向下滑动 bool ...

  5. Javascript - ExtJs - TreePanel组件

    TreePanel组件(Ext.tree.TreePanel)logogram:Ext.tree.Panel | xtype:treepanel 树与节点 树面板组件的根是源头,从根上拓展出其它的子节 ...

  6. MySql cmd下的学习笔记 —— 有关视图的操作(algorithm)

    建立一张简单的查询视图,不用临时表,只用条件合并 在简单的查询中,建立临时表的开销比较大 这是可以指定algorithm选项为merge 在v2的视图中,并没有建立临时表 但在下列情况下,必须建立临时 ...

  7. linux系统 之 git

    1,git是啥? 最流行的分布式版本控制系统,在高度易用的同时,仍然保留着初期设定的目标.它的速度飞快,极其适合管理大项目,它还有着令人难以置信的非线性分支管理系统,可以应付各种复杂的项目开发需求. ...

  8. 【Linux】CentOS7.0下安装JDK环境

    写在前面:此次试验是在CentOS7上面安装的,亲测成功. 所需工具:JDK1.8安装包,xftp 具体步骤: 1,首先使用xftp连接到自己的虚拟机,然后查看是否有"/usr/java/j ...

  9. 【转】C++标准转换运算符static_cast

    static_cast<new_type> (expression) 虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用 ...

  10. 036_lua应用扩展

    一.request_id定义 ## # request id ## lua_package_path '/opt/nginx/conf/lua/lib/?.lua'; init_by_lua ' uu ...