问题一:

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

正确的后序遍历结果:

  1.  
  1. sequence = [37, 35, 51, 47, 59, 73, 93, 98, 87, 61]
  1. python源码:
  1. class Solution:
  2. def VerifySquenceOfBST(self, sequence):
  3. # write code here
  4. if sequence == None or len(sequence) == 0:
  5. return False
  6. length = len(sequence)
  7. root = sequence[length - 1]
  8.  
  9. # 在二叉搜索 树中 左子树节点小于根节点 (应该是二叉排序树)
  10. for i in range(length): # 获得左右的分叉口
  11. if sequence[i] > root:
  12. break
  13.  
  14. # 二叉搜索树中右子树的节点都大于根节点
  15. for j in range(i, length):
  16. if sequence[j] < root:
  17. return False
  18.  
  19. # 判断左子树是否为二叉树
  20. left = True
  21. if i > 0:
  22. left = self.VerifySquenceOfBST(sequence[0:i])
  23.  
  24. # 判断 右子树是否为二叉树
  25. right = True
  26. if i < length - 1:
  27. right = self.VerifySquenceOfBST(sequence[i:-1])
  28.  
  29. return left and right
  30.  
  31. if __name__ == '__main__':
  32. s = Solution()
  33. # sequence = [37, 35, 51, 47, 59, 73, 93, 98, 61, 87] # 错误的二叉排序树的后续遍历
  34. sequence = [37, 35, 51, 47, 59, 73, 93, 98, 87, 61] # 正确的二叉排序树的后续遍历
  35. print(s.VerifySquenceOfBST(sequence))

问题二:

  

  1. 输入两棵二叉树AB,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
  1. class TreeNode:
  2. def __init__(self, x):
  3. self.val = x
  4. self.left = None
  5. self.right = None
  6.  
  7. class Solution:
  8. def HasSubtree(self, pRoot1, pRoot2): # 判断是否有子树
  9. if pRoot1 == None or pRoot2 == None:
  10. return False
  11.  
  12. result = False
  13. if pRoot1.val == pRoot2.val: # 根节点相等,进行下一步
  14. result = self.IsSubtree(pRoot1, pRoot2) # 判断子节点是否“相等”
  15.  
  16. if result == False:
  17. res1 = self.HasSubtree(pRoot1.left, pRoot2)
  18. res2 = self.HasSubtree(pRoot1.right, pRoot2)
  19. result = res1 or res2
  20.  
  21. return result
  22.  
  23. def IsSubtree(self, pRoot1, pRoot2):
  24. if pRoot2 == None:
  25. return True
  26. if pRoot1 == None:
  27. return False
  28. if pRoot1.val == pRoot2.val:
  29. leftt = self.IsSubtree(pRoot1.left, pRoot2.left)
  30. rightt = self.IsSubtree(pRoot1.right, pRoot2.right)
  31. return leftt and rightt
  32. return False
  33.  
  34. def getBSTwithPreTin(self, pre, tin): # 最终确定树的形状,使用object的形式存储
  35. if len(pre) == 0 | len(tin) == 0: # 任何一个为空树,则返回空
  36. return None # 直接跳出代码
  37. root = TreeNode(pre[0]) # 前序遍历直接找到根节点(第一个元素就是根节点)
  38. for i, item in enumerate(tin): # 序号和元素,将中序遍历拆分成左右两支
  39. if root.val == item:
  40. root.left = self.getBSTwithPreTin(pre[1:i + 1], tin[:i])
  41. root.right = self.getBSTwithPreTin(pre[i + 1:], tin[i + 1:])
  42. return root
  43.  
  44. if __name__ == '__main__':
  45. solution = Solution()
  46.  
  47. preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8] # 前序遍历
  48. middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6] # 中序遍历
  49. treeA = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
  50.  
  51. preorder_seq = [1, 2, 3]
  52. middleorder_seq = [2, 1, 3]
  53. treeB = solution.getBSTwithPreTin(preorder_seq, middleorder_seq)
  54.  
  55. print(solution.HasSubtree(treeA, treeB))
  1.  

二叉树的相关在线编程(python)的更多相关文章

  1. Python在线编程环境

    除了安装Python的IDE之外,也可以使用在网页中随时随地编写Python程序. Python官网:https://www.python.org/shell Python123:https://py ...

  2. Python程序设计试验报告一: 熟悉IDLE和在线编程平台

    安徽工程大学 Python程序设计 实验报告                                                                  班级   物流192   ...

  3. Python程序设计实验报告一:熟悉IDLE和在线编程平台

    安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  崔攀  学号3190505136 成绩_____           日期     2020.3.8     指导老师  ...

  4. Python程序设计 实验 1 熟悉 IDLE 和在线编程平台

    ------------恢复内容开始------------ 安徽工程大学 Python程序设计 实验报告 班级   物流191   姓名  姚彩琴  学号3190505129 成绩 日期     2 ...

  5. 算法与数据结构(2)--英雄会第三届在线编程大赛:几个bing

    基础知识的回顾不再写到这里面了,会写一些算法算法的解答或者读一些相关书籍的笔记. 今天做了一道算法题,来自微软必应·英雄会第三届在线编程大赛:几个bing? 做出来了...但不知道为啥执行测试用例失败 ...

  6. Open XML SDK 在线编程黑客松

    2015年2月10日-3月20日,开源社 成员 微软开放技术,GitCafe,极客学院联合举办" Open XML SDK 在线编程黑客松 ",为专注于开发提高生产力的应用及服务的 ...

  7. 网易云课堂_C++程序设计入门(上)_第6单元:丹枫虽老犹多态–继承与多态_第6单元作业【2】- 在线编程(难度:中)

    第6单元作业[2]- 在线编程(难度:中) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统 ...

  8. 网易云课堂_C++程序设计入门(上)_第5单元:万类霜天竞自由 – 对象和类的更多内容_第5单元作业【4】 - 在线编程(难度:难)

    第5单元作业[4] - 在线编程(难度:难) 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系 ...

  9. 实验一 熟悉IDLE和在线编程平台

    实验目的 1.掌握python IDLE集成开发环境的安装与使用 2.熟悉在线编程平台 3.掌握基本的python程序编写.编译与运行程序的方法 实验内容 1.按照实验指导安装IDLE,尝试交互式运行 ...

随机推荐

  1. 《ServerSuperIO Designer IDE使用教程》- 5.树形结构管理设备驱动,小版本更新。发布:v4.2.3.1版本

    v4.2.3.1 更新内容:1.选择和管理设备驱动,增加树状结构显示.2.优化ide代码,核心代码没有改动.下载地址:官方下载 5. 树形结构管理设备驱动,小版本更新 5.1    概述 此次升级主要 ...

  2. HangFire快速入门 分布式后端作业调度框架服务

    安装 NuGet 上有几个可用的Hangfire 的软件包.如果在ASP.NET应用程序中安装HangFire,并使用Sql Server作为存储器,那么请在Package Manager Conso ...

  3. python url参数转dict

    from urllib import parse url='_from=R40&LH_BIN=1&_sop=13&LH_Complete=1&LH_Sold=1& ...

  4. 利用Google趋势来预测比特币价格

    预测市场是件极其困难和不可能的事情,特别是预测市场的短期行为.长期预期相对而言简单很多,因为很多事情把时间拉长,都可以预测,比如我预测烧汽油的车最终都会消失,把时间拉长,都是没问题的.但是这种预测没法 ...

  5. Django--post提交表单内容

    本节目标:①.提交表单内容②.通过客户端提交表单新增一篇文章③.通过Django的forms组件来完成新增一篇文章 =======提交表单内容======== 1.前端html:login.html ...

  6. Mysql之SQL经验基础积累

    1.根据create_time排序,如何确保null值的排在最前面: 解决办法: ,), a.create_time DESC 结果如下图:

  7. Unity Shader Learning

    Toon 表面没有均匀的阴影. 为了达到这个效果,我们需要一个斜坡图. 其目的是将朗伯光强度NdotL重新映射到另一个值. 使用没有渐变的渐变映射,我们可以强制照明逐步渲染.下图显示了如何使用斜坡图来 ...

  8. jQuery AJAX相关方法

    接jQuery学习上篇.因为AJAX是相对独立的一块,所以和jQuery的随笔分开记录了.素材同样来自runoob. 先了解下什么是AJAX. AJAX = 异步 JavaScript 和 XML(A ...

  9. Vray

    VRay是由chaosgroup和asgvis公司出品,中国由曼恒公司负责推广的一款高质量渲染软件.

  10. Exp3 免杀原理与实践 20164302 王一帆

    1 实践内容 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程( ...