题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路
将AB两个二叉树通过前序遍历成list数组,
然后通过遍历listA依次去找listA[i:len(listB)+i]与listB是否相同,相同即找到子结构,反之则为False;
其中还需要考虑AB其一为空的状态以及A==B的状态。
代码
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 转换成数组进行求解
def __init__(self):
self.pR = []
def tree2list(self, pRoot): # 前序遍历
if not pRoot:
return
self.pR.append(pRoot.val)
self.tree2list(pRoot.left)
self.tree2list(pRoot.right)
def HasSubtree(self, pRoot1, pRoot2):
if not pRoot2 or not pRoot1:
return False
# 将p1和p2都前序遍历
self.tree2list(pRoot1)
list1 = self.pR
self.pR = []
self.tree2list(pRoot2)
list2 = self.pR
# 相同判断
if list1 == list2:
return True
# 依次判断
while len(list1) != len(list2):
if list1[:len(list2)] == list2:
return True
list1 = list1[1:]
return False