题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
知识点
二叉树
Qiang的思路
这道题主要考虑的是二叉树的遍历。典型的,我们可以通过递归的方式实现二叉树的遍历。
想要判断B是不是A的子结构,自然需要对A和B进行遍历。首先,需要找到遍历的起始点,通过遍历树A,我们能找到在A中和B的根节点相同的节点。然后对于这些节点,同时遍历A和B,看一下是不是以该节点开头的子树的一部分和B相同,如果相同则证明B就是A的子结构,如果所有节点都不满足条件,那就说明B不是A的子结构。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def getResult(self, pRoot1, pRoot2):
if pRoot2==None:
return True
if pRoot1==None:
return False
if pRoot1.val!=pRoot2.val:
return False
result1=self.getResult(pRoot1.left, pRoot2.left)
result2=self.getResult(pRoot1.right, pRoot2.right)
if result1==True and result2==True:
return True
return False
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if pRoot1==None or pRoot2==None:
return False
if pRoot1.val==pRoot2.val:
if self.getResult(pRoot1, pRoot2)==True:
return True
result1=self.HasSubtree(pRoot1.left, pRoot2)
result2=self.HasSubtree(pRoot1.right, pRoot2)
if result1==True or result2==True:
return True
return False
在编写代码的过程中,需要注意的一点就是判断是不是子结构的终止条件。因为当B是子结构时,并不意味这他就是子树,所以当遍历到B的叶子节点时就认为当前所判断的均满足子结构的条件,并不需要A和B同时满足子节点。
作者原创,如需转载及其他问题请邮箱联系:lwqiang_chn@163.com。
个人网站:https://www.myqiang.top。
网友评论