题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
首先第一步在二叉树A中查找与B根节点R的值一样的节点,通常可以采用递归的方式来遍历整棵树
第二步判断A中以R为根节点的子树的结构是否与B相同,这里也可以采用递归的方法,判断R的值是否与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):
result = False
if pRoot1!=None and pRoot2!=None:
if pRoot1.val==pRoot2.val:
result = self.isSame(pRoot1,pRoot2)
if not result:
result = self.HasSubtree(pRoot1.left,pRoot2)
if not result:
result = self.HasSubtree(pRoot1.right,pRoot2)
return result
def isSame(self,p1,p2):
if p2 == None:
return True
if p1 == None:
return False
if p1.val != p2.val:
return False
return self.isSame(p1.left,p2.left) and self.isSame(p1.right,p2.right)