在 Python 中查找具有给定和的数对,其中数对元素位于不同的 BST 中


假设我们有两个给定的二叉搜索树,并且还给定了一个和;我们需要找到关于给定和的数对,以便每个数对元素必须位于不同的 BST 中。

因此,如果输入类似于 sum = 12

则输出将为 [(6, 6), (7, 5), (9, 3)]

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个函数 solve()。这将接收 trav1、trav2 和 Sum 作为参数。

  • left := 0

  • right := trav2 的大小 - 1

  • res := 一个新的列表

  • 当 left < trav1 的大小 且 right >= 0 时,执行以下操作:

    • 如果 trav1[left] + trav2[right] 等于 Sum,则

      • 将 (trav1[left],trav2[right]) 插入到 res 的末尾

      • left := left + 1

      • right := right - 1

    • 否则,如果 (trav1[left] + trav2[right]) < Sum,则

      • left := left + 1

    • 否则,

      • right := right - 1

  • 返回 res

  • 从主方法执行以下操作:

  • trav1 := 一个新的列表,trav2 := 一个新的列表

  • trav1 := tree1 的中序遍历

  • trav2 := tree2 的中序遍历

  • 返回 solve(trav1, trav2, Sum)

示例(Python)

让我们看看以下实现以获得更好的理解:

 在线演示

class ListNode:
   def __init__(self, data):
      self.data = data
      self.left = None
      self.right = None
def insert(root, key):
   if root == None:
      return ListNode(key)
   if root.data > key:
      root.left = insert(root.left, key)
   else:
      root.right = insert(root.right, key)
   return root
def storeInorder(ptr, traversal):
   if ptr == None:
      return
   storeInorder(ptr.left, traversal)
   traversal.append(ptr.data)
   storeInorder(ptr.right, traversal)
def solve(trav1, trav2, Sum):
   left = 0
   right = len(trav2) - 1
   res = []
   while left < len(trav1) and right >= 0:
      if trav1[left] + trav2[right] == Sum:
         res.append((trav1[left],trav2[right]))
         left += 1
         right -= 1
      elif trav1[left] + trav2[right] < Sum:
         left += 1
      else:
         right -= 1
   return res
def get_pair_sum(root1, root2, Sum):
   trav1 = []
   trav2 = []
   storeInorder(root1, trav1)
   storeInorder(root2, trav2)
   return solve(trav1, trav2, Sum)
root1 = None
   for element in [9,11,4,7,2,6,15,14]:
   root1 = insert(root1, element)
root2 = None
   for element in [6,19,3,2,4,5]:
   root2 = insert(root2, element)
Sum = 12
print(get_pair_sum(root1, root2, Sum))

输入

[9,11,4,7,2,6,15,14], [6,19,3,2,4,5], 12

输出

[(6, 6), (7, 5), (9, 3)]

更新于:2020年8月19日

77 次查看

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告