想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送,微信随时解答你的疑问
中等
阿里云
给你二叉树的根节点 root 和一个整数 distance 。
如果二叉树中两个 叶 节点之间的 最短路径长度 小于或者等于 distance ,那它们就可以构成一组 好叶子节点对 。
返回树中 好叶子节点对的数量 。
输入:root = [1,2,3,null,4], distance = 3
输出:1
解释:树的叶节点是 3 和 4 ,它们之间的最短路径的长度是 3 。这是唯一的好叶子节点对。
输入:root = [1,2,3,4,5,6,7], distance = 3
输出:2
解释:好叶子节点对为 [4,5] 和 [6,7] ,最短路径长度都是 2 。但是叶子节点对 [4,6] 不满足要求,因为它们之间的最短路径长度为 4 。
输入:root = [7,1,4,6,null,5,3,null,null,null,null,null,2], distance = 3
输出:1
解释:唯一的好叶子节点对是 [2,5] 。
输入:root = [100], distance = 1
输出:0
示例 5:
输入:root = [1,1,1], distance = 2
输出:1
tree 的节点数在 [1, 2^10] 范围内。
每个节点的值都在 [1, 100] 之间。
1 <= distance <= 10
# 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, distance):
self.ans = 0
def dfs(root):
if root.left or root.right:
left_dep = [i + 1 for i in dfs(root.left)] if root.left else []
right_dep = [i + 1 for i in dfs(root.right)] if root.right else []
for i in left_dep:
for j in right_dep:
if i + j - 2 <= distance:
self.ans += 1
return left_dep + right_dep
else:
return [1]
dfs(root)
return self.ans
t3 = TreeNode(3)
t2 = TreeNode(2)
t2.right = TreeNode(4)
t = TreeNode(1)
t.left = t2
t.right = t3
s = Solution()
ret = s.countPairs(t, 3)
print(ret)