数据结构系统回顾与总结(3)(判断是否为同一棵二叉搜索树)
来源:互联网 发布:直销返利系统源码 编辑:程序博客网 时间:2024/06/07 05:13
题目描述如下:
这个题在mooc上的浙大版数据结构中有比较详细的讲解,不过我自己也是作死,总想逞强自己做,做了半个下午才做出来,不过思路挺像。
这个题的主题部分就在于检查如何实现。这里采用的是:先用标准序列把标准的二叉搜索树建立起来,然后通过查找来排除后面的序列。打个比方:标准树是3 1 4 2(按这个顺序进行建树),并且按照顺序进行查找,那么我每次查找的时候肯定都访问过上一个数。而如果我按3 2 4 1的顺序进行查找(树是按照3 1 4 2建立的),就会发现当我查找2的时候,必须先经过1,但是1还没有被访问过,如果是同一棵树的话,这种情况是肯定不会发生的。
所以就有了大概思路。然后再想一下整个程序框架是怎么样的。1.建立一个class,来表示二叉搜索树。2.按照题目给出的格式处理输入,在这里我处理输入的方式是这样的:用一个三维数组来表示。比如说按图中的格式输入,处理后的结果是这样的:[[[3,1,4,2],[3,4,1,2],[3,2,4,1]],[[2,1],[1,2]]]。
python代码如下:
#获得输入def inp(): k = [int(x) for x in input().split()] if k[0] == 0: return False if k[0]!=0: le = int(k[0]) num = int(k[1]) lis = [] for i in range(num+1): lis.append([int(x) for x in input().split()]) return lis#把输入给格式化,获得一个三维数组[多个树[多组序列[序列]]]def get_inp(): trs = [] a = inp() while a: trs.append(a) a = inp() return trs
然后就是核心部分,检查序列。我的思路是这样的:每次检查一个数,如果通过返回True,通不过就返回False。然后通过一个for循环遍历检查一个序列,一旦有一个数通不过就跳出循环,并且表示这个序列不行。
以下是python代码:
#每次检查最内层数组的一个值def check(root,tar): if not root: return False if tar == root.data: root.flag = 1 return True if tar > root.data: if not root.flag: return False return check(root.right,tar) if tar < root.data: if not root.flag: return False root.flag = 1 return check(root.left,tar)def main(): k = get_inp() for tree_list in k: for tree_child_list in tree_list[1:]: st = build(tree_list[0]) si = 1 #si代表这个序列的正确性,默认为1。 for x in tree_child_list: if not check(st,x): si = 0 #一旦不正确si置为0,跳出循环。 break if si: print('Yes') else: print('No')
最后一步就是调用main()运行程序。
当然,创建class的时候需要增加一项flag,用来标记当前节点是否被查找过,默认为0。
class tr(object): def __init__(self,data=None): self.right = None self.left = None self.data = data self.flag = 0
end..
阅读全文
0 0
- 数据结构系统回顾与总结(3)(判断是否为同一棵二叉搜索树)
- 数据结构与算法问题 判断两序列是否为同一二叉搜索树序列
- 数据结构课程设计(C语言)——判断两序列是否为同一二叉搜索树
- 是否为同一棵二叉搜索树
- 判断两序列是否为同一二叉搜索树序列
- 判断两序列是否为同一二叉搜索树序列
- 二叉搜索树的构建与判别--是否为同一棵二叉搜索树
- PTA数据结构 5-4 是否同一棵二叉搜索树
- PTA 5-1 是否同一棵二叉搜索树(数据结构)
- PAT 是否为同一棵二叉搜索树
- PTA 数据结构与算法题目集(中文)5-4 是否同一棵二叉搜索树 (25分)
- 04_树4_判断是否为同一二叉搜索树
- 每日一练——判断两序列是否为同一二叉搜索树序列
- PAT:是否为同一棵二叉搜索树(Java实现)
- 是否同一棵二叉搜索树
- PTA-是否同一棵二叉搜索树
- 是否同一棵二叉搜索树
- 是否同一棵二叉搜索树
- graph embedding(常见的图embedding的方法)
- 面试题:在Java中如何跳出当前的多重嵌套循环?
- Scanner类 next与nextLine方法的使用问题
- 集成 Tomcat 插件到 Eclipse 的过程
- 13.2.1 @RequestMapping详解(上)
- 数据结构系统回顾与总结(3)(判断是否为同一棵二叉搜索树)
- vuejs 使用MintUI Loadmore下拉/上拉刷新,刷新框架
- java: java中的 getInstance() 的理解
- Jmeter断言之响应断言-响应断言名词详细解释
- 被人遗忘的MAX_FILE_SIZE文件上传限制大小参数
- Android启动页面(闪屏页面)的实现
- 未来AI晶片发展有八大新趋势
- python 装饰器理解
- Gradle各版本下载地址