思路:
1.当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false
2.self.is_subtree(pRoot1, pRoot2)Tree1根节点为起点判断是否包含Tree2。若不包含,再去根节点的左儿子当作起点,去判断时候包含Tree2(self.HasSubtree(pRoot1.left, pRoot2))。若不包含,再去根节点root的右儿子当作起点,去判断时候包含Tree2
3.如果Tree2已经遍历完了都能对应的上,返回true。如果Tree1遍历完了或者A的值不等于B的值,返回false。如果根节点对应的上,那么就分别去子节点里面匹配。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if not pRoot1 or not pRoot2:
return False
return self.is_subtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
def is_subtree(self, A, B):
if not B:
return True
if not A or A.val != B.val:
return False
return self.is_subtree(A.left,B.left) and self.is_subtree(A.right, B.right)
虽然刚开始有点难,我相信只要坚持就能有所进步。