题目来源:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
思路:
首先要读懂题意,B如果是A的子结构,那么B一定会包含A的某个叶子节点,否则结构就是不同的。
按照先序遍历的顺序:(树A、B的根节点分别记为A、B)
- 如果A.val == B.val,根节点相同,那么判断A和B的左子树、A和B的右子树是否相同,只要有一个不同就为False
- 否则,在A的左右子树A.left和A.right中递归,判断B是否为A的子结构。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isSubStructure(self, A, B):
"""
:type A: TreeNode
:type B: TreeNode
:rtype: bool
"""
def isSubTree(A, B): # 判断是否为子树
if not B:
return True
if not A or A.val != B.val:
return False
return isSubTree(A.left, B.left) and isSubTree(A.right, B.right)
if not A or not B:
return False
if A.val == B.val:
return isSubTree(A, B)
else:
return self.isSubStructure(A.left, B) or self.isSubStructure(A.right, B)
参考: