使用 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

更新于: 2021年5月29日

260 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.