题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解法一:递归法
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.Root1_list = []
self.Root2_list = []
# 先序遍历
def Createtreelist(self,root,note):
if root is None:
return
if note is True:
self.Root1_list.append(root.val)
self.Createtreelist(root.left,True)
self.Createtreelist(root.right,True)
else:
self.Root2_list.append(root.val)
self.Createtreelist(root.left,False)
self.Createtreelist(root.right,False)
def HasSubtree(self,pRoot1,pRoot2):
"""
:param pRoot1: TreeNode
:param pRoot2: TreeNode
:return:
"""
self.Createtreelist(pRoot1,True)
self.Createtreelist(pRoot2,False)
p = self.Root2_list
q = self.Root1_list
if len(p) is 0:
return False
note2 = 0
for i in range(len(q)):
if note2 == len(p):
break
elif q[i] == p[note2]:
note2 += 1
else:
if q[i] == p[0]:
continue
note2 = 0
if note2 == len(p):
return True
return False