一、题目:
输入两棵二叉树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 HasSubtree(self, pRoot1, pRoot2): # write code here if pRoot1==None or pRoot2==None: return False return self.IsSubTree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2) def IsSubTree(self, pRoot1, pRoot2): if pRoot1==None: if pRoot2==None: return True else: return False else: if pRoot2==None: return True else: return pRoot1.val==pRoot2.val and self.IsSubTree(pRoot1.left, pRoot2.left) and self.IsSubTree(pRoot1.right, pRoot2.right)