输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
- 首先通过递归来遍历A树,如果根节点相同,那么判断是不是子结构,如果根节点不同,判断左节点,再判断右节点
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if pRoot1 == None or pRoot2 == None:
return False
result = False
if pRoot2.val == pRoot1.val:
result = self.Tree1HasTree2(pRoot1, pRoot2)
if not result:
result = self.HasSubtree(pRoot1.left, pRoot2)
if not result:
result = self.HasSubtree(pRoot1.right, pRoot2)
return result
- 判断出如果两个元素相等之后,再通过递归判断是不是子结构,如果B遍历完了,说明是子结构,如果B没遍历完,A完了,或者遍历到元素不相等的时候,说明不是子结构。递归用and
def Tree1HasTree2(self, pRoot1, pRoot2):
if pRoot2 == None:
return True
elif pRoot1 == None:
return False
if pRoot1.val == pRoot2.val:
return self.Tree1HasTree2(pRoot1.left, pRoot2.left) and self.Tree1HasTree2(pRoot1.right, pRoot2.right)
else:
return False
完整代码:
#-*- coding:utf-8 -*-
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def Tree1HasTree2(self, pRoot1, pRoot2):
if pRoot2 == None:
return True
elif pRoot1 == None:
return False
if pRoot1.val == pRoot2.val:
return self.Tree1HasTree2(pRoot1.left, pRoot2.left) and self.Tree1HasTree2(pRoot1.right, pRoot2.right)
else:
return False
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if pRoot1 == None or pRoot2 == None:
return False
result = False
if pRoot2.val == pRoot1.val:
result = self.Tree1HasTree2(pRoot1, pRoot2)
if not result:
result = self.HasSubtree(pRoot1.left, pRoot2)
if not result:
result = self.HasSubtree(pRoot1.right, pRoot2)
return result