树的子树与子结构定义:
子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点.
子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取。
递归,以A的每个节点为根节点,与B进行比较,比较过程定义为一个search函数
遍历A的所有节点使用深度优先搜索,递归调用HasSubtree()
class Solution: def HasSubtree(self, pRoot1, pRoot2): def search(root1, root2): if not root2: return True if root1 and root1.val == root2.val: return search(root1.left, root2.left) and search(root1.right, root2.right) else: return False if not pRoot1 or not pRoot2: return False return search(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)