题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:我们知道树是有根节点和左右子树组成的,所以如果B是A的子树,就代表着B的根节点是A中的一个节点,且B的左右子树分别是A中对应节点的子树。因此我们需要对A树进行遍历,遍历出B的根节点,然后判断这个节点下B的左右子树是否匹配。
综上,我们需要两步进行,
1、对A进行遍历
2、对遍历的节点左右子树进行匹配,判断B是否是其子树
Python代码如下:
# -*- 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
ret = False
if not pRoot2 or not pRoot1:
return False
if pRoot1.val == pRoot2.val:
ret = self.HasHeadSub(pRoot1,pRoot2)
if not ret:
ret = self.HasHeadSub(pRoot1.left,pRoot2)
if not ret:
ret = self.HasHeadSub(pRoot1.right,pRoot2)
return ret
def HasHeadSub(self, p1, p2):
if not p2:
return True
if not p1:
return False
if p1.val!=p2.val:
return False
return self.HasHeadSub(p1.left,p2.left) and self.HasHeadSub(p1.right,p2.right)