在 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)]
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP