使用 Python 查找良好叶子节点对的数量的程序
假设我们有一棵二叉树,以及另一个值距离 d。当这两个节点之间的最短路径小于或等于距离 d 时,一对两个不同的叶子节点被称为良好的。
因此,如果输入类似于

并且距离 d = 4,则输出将为 2,因为对是 (8,7) 和 (5,6),因为它们的路径长度距离为 2,但 (7,5) 或 (8,6) 或其他对不是好的,因为它们的路径长度为 5,大于 d = 4
为了解决这个问题,我们将遵循以下步骤 -
sol := 0
定义一个函数 util()。这将接收根节点
如果根节点为空,则
返回一个新的列表
如果根节点是叶子节点,则
返回一个包含一对 [0, 0] 的数组
否则,
cur := 一个新的列表
l := util(根节点的左子树)
r := util(根节点的右子树)
对于 l 中的每个节点 n,执行
n[1] := n[1] + 1
对于 r 中的每个节点 n,执行
n[1] := n[1] + 1
对于 r 中的每个节点 n,执行
对于 l 中的每个节点 n1,执行
如果 n[1] + n1[1] <= d,则
sol := sol + 1
返回 l+r
从主方法执行以下操作 -
util(根节点)
返回 sol
让我们查看以下实现以更好地理解 -
示例
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def __init__(self): self.sol = 0 def solve(self, root, d): def util(root): if not root: return [] if not root.left and not root.right: return [[0, 0]] else: cur = [] l = util(root.left) r = util(root.right) for n in l: n[1] += 1 for n in r: n[1] += 1 for n in r: for n1 in l: if n[1] + n1[1] <= d: self.sol += 1 return l+r util(root) return self.sol root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.right = TreeNode(4) root.left.right.left = TreeNode(8) root.left.right.right = TreeNode(7) root.right.left = TreeNode(5) root.right.right = TreeNode(6) d = 4 ob = Solution() print(ob.solve(root, d))
输入
root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.right = TreeNode(4) root.left.right.left = TreeNode(8) root.left.right.right = TreeNode(7) root.right.left = TreeNode(5) root.right.right = TreeNode(6) d = 4
输出
2
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP