问题一:

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

正确的后序遍历结果:


sequence = [37, 35, 51, 47, 59, 73, 93, 98, 87, 61]
python源码:
 class Solution:
def VerifySquenceOfBST(self, sequence):
# write code here
if sequence == None or len(sequence) == 0:
return False
length = len(sequence)
root = sequence[length - 1] # 在二叉搜索 树中 左子树节点小于根节点 (应该是二叉排序树)
for i in range(length): # 获得左右的分叉口
if sequence[i] > root:
break # 二叉搜索树中右子树的节点都大于根节点
for j in range(i, length):
if sequence[j] < root:
return False # 判断左子树是否为二叉树
left = True
if i > 0:
left = self.VerifySquenceOfBST(sequence[0:i]) # 判断 右子树是否为二叉树
right = True
if i < length - 1:
right = self.VerifySquenceOfBST(sequence[i:-1]) return left and right if __name__ == '__main__':
s = Solution()
# sequence = [37, 35, 51, 47, 59, 73, 93, 98, 61, 87] # 错误的二叉排序树的后续遍历
sequence = [37, 35, 51, 47, 59, 73, 93, 98, 87, 61] # 正确的二叉排序树的后续遍历
print(s.VerifySquenceOfBST(sequence))

问题二:

  

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None class Solution:
def HasSubtree(self, pRoot1, pRoot2): # 判断是否有子树
if pRoot1 == None or pRoot2 == None:
return False result = False
if pRoot1.val == pRoot2.val: # 根节点相等,进行下一步
result = self.IsSubtree(pRoot1, pRoot2) # 判断子节点是否“相等” if result == False:
res1 = self.HasSubtree(pRoot1.left, pRoot2)
res2 = self.HasSubtree(pRoot1.right, pRoot2)
result = res1 or res2 return result def IsSubtree(self, pRoot1, pRoot2):
if pRoot2 == None:
return True
if pRoot1 == None:
return False
if pRoot1.val == pRoot2.val:
leftt = self.IsSubtree(pRoot1.left, pRoot2.left)
rightt = self.IsSubtree(pRoot1.right, pRoot2.right)
return leftt and rightt
return False def getBSTwithPreTin(self, pre, tin): # 最终确定树的形状,使用object的形式存储
if len(pre) == 0 | len(tin) == 0: # 任何一个为空树,则返回空
return None # 直接跳出代码
root = TreeNode(pre[0]) # 前序遍历直接找到根节点(第一个元素就是根节点)
for i, item in enumerate(tin): # 序号和元素,将中序遍历拆分成左右两支
if root.val == item:
root.left = self.getBSTwithPreTin(pre[1:i + 1], tin[:i])
root.right = self.getBSTwithPreTin(pre[i + 1:], tin[i + 1:])
return root if __name__ == '__main__':
solution = Solution() preorder_seq = [1, 2, 4, 7, 3, 5, 6, 8] # 前序遍历
middleorder_seq = [4, 7, 2, 1, 5, 3, 8, 6] # 中序遍历
treeA = solution.getBSTwithPreTin(preorder_seq, middleorder_seq) preorder_seq = [1, 2, 3]
middleorder_seq = [2, 1, 3]
treeB = solution.getBSTwithPreTin(preorder_seq, middleorder_seq) print(solution.HasSubtree(treeA, treeB))
 

二叉树的相关在线编程(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. Spark实战

    实战 数据导入Hive中全量: 拉链增量:用户.商品表数据量大时用 拉链表动作表 增量城市信息 全量 需求一: 获取点击.下单和支付数量排名前 的品类 ①使用累加器: click_category_i ...

  2. gitlab使用过程中的需求与解决

    序言 在git使用过程中发现指令实在太多,就算记忆后不长用的话很快也会忘记掉,所以编写本文的初衷是为了记录在使用git指令的过程中所遇到的需求与解决方法,毕竟使用git的需求也就那么一些,范围不大,所 ...

  3. linux 使用技巧 screen 管理你的远程桌面的会话创建和使用

    下面介绍  screen 使用的技巧教你管理远程会话 你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份. ftp 传 ...

  4. 【redis】在windos下的redis服务器的搭建

    1.下载Redis-x64-3.2.100(楼主用的版本,需要安装包的可以找我要) 下载官方版本 2.解压后在cmd下运行 redis-server redis.windos.conf 此时redis ...

  5. MonggoDB(二)

    分组聚合 如果你有数据存储在MongoDB中,你想做的可能就不仅仅是将数据提取出来这么简单,可能需要对数据进行分析并加以利用. 聚合框架:可以使用多个构件创建一个管道,上一个构件的结果传给下一个构件. ...

  6. STM8L052低功耗模式

    Stm8L系列单片机的低功耗有五种模式: § wait模式 § Lowpower run模式 § Lowpower wait模式 § Active-haltwith full RTC模式 § Halt ...

  7. 输出九九乘法表(Python、Java、C、C++、JavaScript)

    最近在学python的过程中,接触到了循环的知识,以及这个案例,于是写了下!感觉还不错,然后就用其它几种语言也试了下!! 接下来,就跟大家分享下实现方法!! 实现输出九九乘法表,主要用到的是循环的知识 ...

  8. 把H5打包成IOS APP其实可以很简单!签名?越狱?都不需要!

    很多小伙伴都在开发自己的app, 有的实现实现比较简单,就是一个h5页面,然后想要打包成app发布出去. 这个想法很单纯 打包生成个app这个是很简单的,网上一堆打包工具,分分钟可以完成 BUT…… ...

  9. KMP性质小结

    跪拜_Blackjack_神犇

  10. java 根据某个数字,计算前后多少天的具体日期

    import java.text.ParsePosition; import java.text.SimpleDateFormat; import java.util.Calendar; import ...