剑指offer:树的子结构-创新互联
题目描述
输入两棵二叉树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):
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
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站题目:剑指offer:树的子结构-创新互联
网页URL:http://hbruida.cn/article/dogdhp.html