您的位置:首页 > 编程语言 > Python开发

《苦练算法》-剑指Offer- 十七、树的子结构 -python编写

2018-02-05 09:55 197 查看
题目描述

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

题目分析

判断B是否为A的子结构 注意ps这个肯定为某个先级条件

1.先考虑 A为null 和B为null的时候,此时都应该返回False

2.继而判断A的此时的节点和B的此时的节点 是否为子结构的相同的根节点,进行相应的子树判断。

3.因为题目只问你有没有子树而已,所以只需要判断是否存在即可,所以需要或上A的左子树是否存在B的子树,A的右子树是否存在B的子树

4.判断是否为子树的分析: 如果root2为None说明root2遍历结束,全部能和root1匹配上说明匹配成功返回True,如果root1为None说明root1遍历结束时,root2还没结束,说明不匹配返回False,上述都不满足说明还需要判断是否匹配,如果此时的这对根节点的值相等则进行递归判断,这对根节点的左节点和右节点是否能全部匹配。

代码如下:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
#判断 单个root的子树的程序
def isSubtree(self, root1, root2):
#如果2遍历完说明 匹配成功
if root2 == None:
return True
#如果1便利完说明,2还没便利完,匹配不成功
if root1 == None:
return False
#如果这对根节点的值相等,进行相应的递归遍历这对节点的 左右节点是否匹配
if root1.val == root2.val:
return self.isSubtree(root1.left,root2.left) and self.isSubtree(root1.right,root2.right)
#总程序
def HasSubtree(self, pRoot1, pRoot2):
# write code here
#特殊情况 需判断
if pRoot1 == None or pRoot2 == None:
return False
#进行递归判断和遍历,判断1此时是否有2的子树,或1的左子树中是否存在与2相同的的子树,或1的右子树是否存在与2相同的子树
return self.isSubtree(pRoot1,pRoot2) or self.HasSubtree(pRoot1.left,pRoot2) or self.HasSubtree(pRoot1.right,pRoot2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐