输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
思路:
先判断B 为空, 则返回 False
在A中遍历,看B的根节点是否出现
如果出现,比较这个节点的子树是否与B 相同
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def compare(self,A,B):
if not A and B :
return False
elif not B :
return True
elif A.val != B.val :
return False
elif not B.left and not B.right and B.val==A.val:
return True
else:
return self.compare(A.left,B.left) and self.compare(A.right,B.right)
def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
if not B or not A:
return False
tmp = B.val
stack = [A]
if A.val == tmp:
target = A
else:
target = None
while stack :
r = stack.pop()
if r.val == tmp:
target = r
break
if r.left:
if r.left.val == tmp:
target = r.left
break
stack.append(r.left)
if r.right:
if r.right.val == tmp:
target = r.right
break
stack.append(r.right)
if not target:
return False
return self.compare(target,B)