题目:
题目链接: https://leetcode-cn.com/problems/subtree-of-another-tree/
解题思路:
比对s和t当前节点的值是否相同
如果相同,递归比对左右子树
如果不相同,将s的左右子树放入栈,然后继续对栈内的节点与t的值进行比对
直到左右子树都相等,或者遍历完s树的所有节点
代码实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
def subtree_help(s, t):
if not s and not t:
return True
elif not s and t:
return False
elif s and not t:
return False
elif s.val != t.val:
return False
left = subtree_help(s.left, t.left)
right = subtree_help(s.right, t.right)
return left and right
if s and not t:
return True
elif not s and t:
return False
elif not s and not t:
return True
stack = [s]
while stack:
node = stack[-1]
stack.pop()
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
if node.val != t.val:
continue
left = subtree_help(node.left, t.left)
right = subtree_help(node.right, t.right)
if left and right:
return True
return False