《剑指offer》 树的子结构
本题来自《剑指offer》 树的子结构
题目:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
分两步走:
第一步:判断根节点,两个根节点若相同,则进入第二步,否则继续寻找根节点
第二步:两个数自行遍历,直到根节点为止
Python Code:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if pRoot1 == None or pRoot2 == None: #判断边界条件
return False
return self.issubtree(pRoot1,pRoot2)
def issubtree(self,p1,p2):
if p2 == None: #如果p2为空了说明p2全部匹配上了,所以返回是子结构
return True
if p1 == None: #母结构为空,返回假
return False
res = False
if p1.val == p2.val: #第一步,即比较两个头结点是否相等
#头结点相等的情况下,递归匹配其左右子节点
res = self.issubtree(p1.left,p2.left) and self.issubtree(p1.right,p2.right)
#分别从左右子节点开始调用,去匹配
return res or self.issubtree(p1.left,p2) or self.issubtree(p1.right,p2)
总结:
《剑指offer》 树的子结构的更多相关文章
- 剑指offer——树的子结构 (JAVA代码)
		
版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: ...
 - 剑指Offer 树的子结构
		
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分为2个部分.1先找出A中和B根节点相同的节点r. 2,咱判断B中所有孩子节点是不 ...
 - 剑指Offer——树的子结构
		
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 分析: 先匹配到A的某个结点和B的根相同,然后往下继续匹配.不匹配则递归匹配左右子树. 代码: ...
 - 用js刷剑指offer(树的子结构)
		
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 牛客网链接 js代码 /* function TreeNode(x) { this.val = x ...
 - 剑指 offer 树的子结构
		
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 第一遍没写出来错误点:认为首先应该找到pRoot1等于pRoot2的节点,但是递归就是自己在不 ...
 - 剑指offer--24.树的子结构
		
时间限制:1秒 空间限制:32768K 热度指数:407165 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) class Solution ...
 - 剑指Offer-17.树的子结构(C++/Java)
		
题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 分析: 注意这道题是判断B是不是A的子结构,而不是子树,这一点要注意下,且空树不是任意一个树的子结构 ...
 - [剑指Offer]26-树的子结构
		
题意 判断一棵树(参数二)是不是另一棵树(参数一)的子结构. 题解 递归第一棵树,找两棵树中值一样的节点.若找到后,用另一个函数判断以相同值得节点为根的树2是不是树1的子结构. 代码 class Tr ...
 - 剑指offer18 树的子结构
		
另一种写法 class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = f ...
 - 剑指offer 树的基本操作:四种遍历方式
		
前序遍历 递归版 编程思想 即借助系统栈,效率较低.二叉树的前序遍历规则:1. 访问根结点: 2. 遍历左子树: 3. 遍历右子树 编程实现 //树的定义 struct TreeNode { int ...
 
随机推荐
- DOM操作插入新的子节点
			
appendChid.insertBefore首先这两个方法都是添加子节点. append(追加),appendChid:给父节点的子节点末尾添加子节点. insertBefore(newNode, ...
 - 【深入分析Java Web技术内幕】1、深入Web请求过程知识点
			
如何发起一个请求 发起一盒HTTP请求的过程就是建立一个Socket通信的过程! 既然发起一个HTTP的本质就是建立一个Socket连接,那么我们完全可以模拟浏览器来发起HTTP请求,这很好实现,如H ...
 - ueditor取消文本编辑器的自动拉伸高度、宽度。
			
1.首先引入富文本编辑器 <script type="text/javascript" src="<%=basePath%>js/ueditor/ued ...
 - nginx 模块配置
			
第一个 当前活跃的连接数 nginx握手的数 连接数 总的请求数
 - NDT 算法和一些常见配准算法
			
原文链接:http://ghx0x0.github.io/2014/12/30/NDT-match/ 目前三维配准中用的较多的是ICP迭代算法,需要提供一个较好的初值,同时由于算法本身缺陷,最终迭代结 ...
 - 【原理】VRRP详解
			
写在前面 keepalived是一个基于VRRP协议来实现的服务高可用方案,从而可以避免IP单点故障.一般与其他负载均衡技术,如LVS,Nginx等一起来工作来达到集群高可用的目的 关于Keepali ...
 - zookeeper安装教程
			
zookeeper 一.单机安装 1.1 下载 1.2 安装 1.3 配置 1.4 启动和停止 二.伪集群模式 2.1 zookeeper1配置 2.2 zookeeper2配置 2.3 zooke ...
 - Shell-find . -type f -name "*.log" -print0 | xargs -0 rm -f
			
用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long.
 - hibernate框架学习第四天:关联关系、外键、级联等
			
一对多关联关系表 一方 多方(外键)实体类 一方:TeacherModel 添加多方的集合Set 多方StudentModel 添加一方的对象一方配置关系 name:一方模型中描述多方的集合对象名 c ...
 - Spring HibernateTemplate与HibernateDaoSupport对比
			
HibernateTemplate与HibernateDaoSupport两者都是spring整合hibernate提供的模板技术. 对于保存一个对象,HibernateTemplate需要先配置 配 ...