【第 199 场周赛 阿里云】【LeeCode 中等 python3】 5474. 好叶子节点对的数量

想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送,微信随时解答你的疑问

5474. 好叶子节点对的数量 python3

中等 阿里云

给你二叉树的根节点 root 和一个整数 distance 。

如果二叉树中两个 叶 节点之间的 最短路径长度 小于或者等于 distance ,那它们就可以构成一组 好叶子节点对 。

返回树中 好叶子节点对的数量 。

示例 1:

【第 199 场周赛 阿里云】【LeeCode 中等 python3】 5474. 好叶子节点对的数量_第1张图片

输入:root = [1,2,3,null,4], distance = 3
输出:1
解释:树的叶节点是 3 和 4 ,它们之间的最短路径的长度是 3 。这是唯一的好叶子节点对。

示例 2:

【第 199 场周赛 阿里云】【LeeCode 中等 python3】 5474. 好叶子节点对的数量_第2张图片

输入:root = [1,2,3,4,5,6,7], distance = 3
输出:2
解释:好叶子节点对为 [4,5] 和 [6,7] ,最短路径长度都是 2 。但是叶子节点对 [4,6] 不满足要求,因为它们之间的最短路径长度为 4 。

示例 3:

输入:root = [7,1,4,6,null,5,3,null,null,null,null,null,2], distance = 3
输出:1
解释:唯一的好叶子节点对是 [2,5] 。

示例 4:

输入: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)

你可能感兴趣的:(LeeCode,Python3,面试题,二叉树,python,算法,dfs,leetcode)