剑指offer-树的子结构-python
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路
- 空树不是任意一个树的子结构,如果 root1 与root2 中有一个为空树的话,返回False
- 判断是否存在子树:
- 当rootA的值与rootB一致时,B是A的子结构(且A的左子树等于B左子树,A的右子树等于B右子树)
- 当A的左子树等于B,B是A的子结构
- 当A的右子树等于B,B是A的子结构
- 循环递归
# -*- 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): if not pRoot1 or not pRoot2: return False return self.isrubtreeequl(pRoot1,pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2) def isrubtreeequl(self,root1,root2): if not root2: return True if not root1: return False return root1.val == root2.val and self.isrubtreeequl(root1.left,root2.left) and self.isrubtreeequl(root1.right,root2.right)