面试题26. 树的子结构
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
思路 深度优先遍历
定义2个函数:一个函数遍历 第二函数负责判断
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
if not A or not B:
return False
return self.helper(A,B) or self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B)
def helper(self,A,B):
if B == None: #第一个函数已经判断非空,所以再次为空,表示B中全部结点都匹配完
return True
if A == None:
return False
return A.val == B.val and self.helper(A.left,B.left) and self.helper(A.right,B.right)