在 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)]
广告