题目:
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
示例 1:
给定的树 s:
3
/ \
4 5
/ \
1 2
给定的树 t:
4
/ \
1 2
返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。
示例 2:
给定的树 s:
3
/ \
4 5
/ \
1 2
/
0
给定的树 t:
4
/ \
1 2
返回 false。
通过次数32,453提交次数70,016
题目的理解:
找从t开始所有节点的值都一样的子节点。
python实现
class Solution:
def isSubtree(self, s: TreeNode, t: TreeNode) -> bool:
tNodeList = list()
nodeList = [s]
while len(nodeList) > 0:
nodeListTemp = list()
for node in nodeList:
if node.val == t.val:
tNodeList.append(node)
if node.left is not None:
nodeListTemp.append(node.left)
if node.right is not None:
nodeListTemp.append(node.right)
nodeList = nodeListTemp
if len(tNodeList) <= 0:
return False
def isSame(node1: TreeNode, node2: TreeNode) -> bool:
node1List = [node1]
node2List = [node2]
while len(node1List) > 0 or len(node2List) > 0:
node1ListTemp = list()
node2ListTemp = list()
if len(node1List) != len(node2List):
return False
for index in range(len(node1List)):
node1Temp = node1List[index]
node2Temp = node2List[index]
if node1Temp.val != node2Temp.val:
return False
if node1Temp.left is not None:
if node2Temp.left is None:
return False
else:
if node1Temp.left.val != node2Temp.left.val:
return False
node1ListTemp.append(node1Temp.left)
node2ListTemp.append(node2Temp.left)
else:
if node2Temp.left is not None:
return False
if node1Temp.right is not None:
if node2Temp.right is None:
return False
else:
if node1Temp.right.val != node2Temp.right.val:
return False
node1ListTemp.append(node1Temp.right)
node2ListTemp.append(node2Temp.right)
else:
if node2Temp.right is not None:
return False
node1List = node1ListTemp
node2List = node2ListTemp
return True
result = False
for node in tNodeList:
result = isSame(node, t)
if result:
return True
return result
想看最优解法移步此处
提交
100%刚刚还在感叹为啥代码写那么烂,然后获得了一个100%。 可以古
// END 可能我合适当程序员,因为写代码给我快乐
网友评论