022/leetcode
/728. 自相似图像.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def flipEquiv(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return (self.flipEquiv(root1.left, root2.left) and
self.flipEquiv(root1.right, root2.right)) or \
(self.flipEquiv(root1.left, root2.right) and
self.flipEquiv(root1.right, root2.left))
/1005. 象棋骑士的最短路径.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def longestUnivaluePath(self, root: Optional[TreeNode]) -> int:
def dfs(root):
if not root:
return 0
l = dfs(root.left)
r = dfs(root.right)
if root.left and root.left.val == root.val:
l += 1
return l
if root.right and root.right.val == root.val:
r += 1
return r
return max(l, r)
return max(dfs(root), 0)
/117. 填充每个节点的下一个右节点指针.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def countPairs(self, root: Optional[TreeNode], distance: int) -> int:
def dfs(root):
if not root:
return 0
if not root.left and not root.right:
return 1
left = dfs(root.left)
right = dfs(root.right)
for i in range(left):
for j in range(right):
if i + j < distance:
self.res += 1
return left + right
self.res = 0
dfs(root)
return self.res
/96. 重复的子串.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def longestUnivaluePath(self, root: Optional[TreeNode]) -> int:
def dfs(root):
if not root:
return 0
left = dfs(root.left)
right = dfs(root.right)
self.res = max(self.res, left + right)
if root.left and root.left.val == root.val:
left += 1
if root.right and root.right.val == root.val:
right += 1
return max(left, right)
self.res = 0
dfs(root)
return self.res
/1105. 填充每个节点的下一个右侧节点指针 II.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def flipEquiv(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return (self.flipEquiv(root1.left, root2.left) and
self.flipEquiv(root1.right, root2.right)) or \
(self.flipEquiv(root1.left, root2.right) and
self.flipEquiv(root1.right, root2.left))
/22. 括号生成.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def flipEquiv(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return (self.flipEquiv(root1.left, root2.left) and
self.flipEquiv(root1.right, root2.right)) or \
(self.flipEquiv(root1.left, root2.right) and
self.flipEquiv(root1.right, root2.left))
/529. 扫雷游戏.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right