博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer:树的子结构
阅读量:6883 次
发布时间:2019-06-27

本文共 1289 字,大约阅读时间需要 4 分钟。

题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

class TreeNode:    def __init__(self, x):        self.val = x        self.left = None        self.right = Noneclass Solution:    def HasSubtree(self, pRoot1, pRoot2):        def helper(root1, root2):            # 如果root2已经遍历完了,说明root2的每一个节点都能在pRoot1找到对应的节点            if not root2:                return True            # 如果pRoot1遍历完而pRoot2还没遍历完,说明这root1不是对应的子树根节点            if not root1:                return False            # 如果遍历过程中存在值不相等的节点,说明不是要找的子树            if root1.val != root2.val:                return False            # 如果当前节点的值相同,那么继续遍历剩下的节点            return (helper(root1.left, root2.left)                    and helper(root1.right, root2.right))        # 由于题目规定,空树不是子结构,所以特殊处理这种情况        if not pRoot2 or not pRoot1:            return False        res = False        # 首先找到pRoot1中与pRoot2的根节点的值相同的节点root1,        # 然后按照与pRoot2相同的顺序去遍历找到的root1,如果以root1为根节点的子树和pRoot2一样        # 那么说明在pRoot1中找到了跟pRoot2一样的子树。        if pRoot1.val == pRoot2.val:            res = helper(pRoot1, pRoot2)        if not res:            # 递归遍历pRoot1,直到找到一个子树或者遍历完整棵树            res = self.HasSubtree(pRoot1.left, pRoot2) \                  or self.HasSubtree(pRoot1.right, pRoot2)        return res

转载于:https://blog.51cto.com/jayce1111/2383769

你可能感兴趣的文章
把图片保存到数据库里
查看>>
【CUDA学习】全局存储器
查看>>
Reward HDU
查看>>
ISSkin 使用技巧,WinXP 下的窗口阴影
查看>>
HttpClient传递Cookie
查看>>
网站可用性测试及优化指南-随笔2
查看>>
Hammer.js
查看>>
WebService学习总结(四)——调用第三方提供的webService服务
查看>>
Selenium学习笔记之外部化相关测试数据---xml
查看>>
基于HTML5 Canvas实现的图片马赛克模糊特效
查看>>
原: 安装VMtools过程流水帐
查看>>
数组循环移位的几种解法
查看>>
Rxlifecycle(三):坑
查看>>
matplotlib绘图不显示问题解决plt.show()
查看>>
Angular开发实践(五):深入解析变化监测
查看>>
centos7 配置 uwsgi 系统服务(systemd)
查看>>
RunC容器逃逸漏洞席卷业界,网易云如何做到实力修复?
查看>>
微服务应用新趋势:Service Mesh、AIOps和中台化
查看>>
后装业务管理平台项目总结
查看>>
FastJson几种常用场景
查看>>