Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में संतुलित बीएसटी में दिए गए योग के साथ एक जोड़ी खोजें

अवधारणा

किसी दिए गए बैलेंस्ड बाइनरी सर्च ट्री और लक्ष्य योग के संबंध में, हम एक ऐसा फ़ंक्शन लिखते हैं जो सही होता है यदि योग के साथ एक जोड़ी लक्ष्य योग के बराबर होती है, अन्यथा झूठी वापसी होती है। इस मामले में, अपेक्षित समय जटिलता ओ (एन) है और केवल ओ (लॉगन) अतिरिक्त स्थान लागू किया जा सकता है। यहां, बाइनरी सर्च ट्री में किसी भी संशोधन की अनुमति नहीं है। हमें ध्यान रखना होगा कि संतुलित बीएसटी की ऊंचाई हमेशा ओ (लॉगन) होती है।

उदाहरण

जावा में संतुलित बीएसटी में दिए गए योग के साथ एक जोड़ी खोजें

विधि

Brute Force Solution के अनुसार, हम BST में प्रत्येक जोड़ी पर विचार करते हैं और सत्यापित करते हैं कि योग X के बराबर है या नहीं। इस समाधान की समय जटिलता O(n^2) होगी।

अब एक बेहतर उपाय यह है कि एक सहायक सरणी का निर्माण किया जाए और सरणी में BST के इनऑर्डर ट्रैवर्सल को संग्रहीत किया जाए। इस मामले में, सरणी को सॉर्ट किया जाएगा क्योंकि बीएसटी के इनऑर्डर ट्रैवर्सल हमेशा सॉर्ट किए गए डेटा का उत्पादन करते हैं। तो एक बार इनऑर्डर ट्रैवर्सल की उपलब्धता के बाद, हम ओ (एन) समय में जोड़ सकते हैं। याद रखें, यह समाधान O(n) समय में काम करता है, लेकिन इसके लिए O(n) सहायक स्थान की आवश्यकता होती है।

उदाहरण

// Java code to find a pair with given sum
// in a Balanced BST
import java.util.ArrayList;
// A binary tree node
class Node1 {
   int data1;
   Node1 left1, right1;
   Node1(int d){
      data1 = d;
      left1 = right1 = null;
   }
}
public class BinarySearchTree {
   // Indicates root of BST
   Node1 root1;
   // Indicates constructor
   BinarySearchTree(){
      root1 = null;
   }
   // Indicates inorder traversal of the tree
   void inorder(){
      inorderUtil1(this.root1);
   }
   // Indicates utility function for inorder traversal of the tree
   void inorderUtil1(Node1 node1){
      if (node1 == null)
         return;
      inorderUtil1(node1.left1);
      System.out.print(node1.data1 + " ");
      inorderUtil1(node1.right1);
   }
   // Now this method mainly calls insertRec()
   void insert(int key1){
      root1 = insertRec1(root1, key1);
   }
   /* Indicates a recursive function to insert a new key in BST */
   Node1 insertRec1(Node1 root1, int data1){
   /* So if the tree is empty, return a new node */
   if (root1 == null) {
      root1 = new Node1(data1);
      return root1;
   }
   /* Otherwise, recur down the tree */
   if (data1 < root1.data1)
      root1.left1 = insertRec1(root1.left1, data1);
   else if (data1 > root1.data1)
      root1.right1 = insertRec1(root1.right1, data1);
   return root1;
}
// Indicates method that adds values of given BST into ArrayList
// and hence returns the ArrayList
ArrayList<Integer> treeToList(Node1 node1, ArrayList<Integer> list1){
   // Indicates Base Case
   if (node1 == null)
      return list1;
   treeToList(node1.left1, list1);
   list1.add(node1.data1);
   treeToList(node1.right1, list1);
   return list1;
}
// Indicates method that checks if there is a pair present
boolean isPairPresent(Node1 node1, int target1){
   // Now this list a1 is passed as an argument
   // in treeToList method
   // which is later on filled by the values of BST
   ArrayList<Integer> a1 = new ArrayList<>();
   // Now a2 list contains all the values of BST
   // returned by treeToList method
   ArrayList<Integer> a2 = treeToList(node1, a1);
   int start1 = 0; // Indicates starting index of a2
   int end1 = a2.size() - 1; // Indicates ending index of a2
   while (start1 < end1) {
      if (a2.get(start1) + a2.get(end1) == target1) // Target Found!{
         System.out.println("Pair Found: " + a2.get(start1) + " + " + a2.get(end1) + " " + "= " + target1);
         return true;
      }
      if (a2.get(start1) + a2.get(end1) > target1)
      // decrements end
      {
         end1--;
      }
      if (a2.get(start1) + a2.get(end1) < target1)
      // increments start
      {
         start1++;
      }
   }
   System.out.println("No such values are found!");
   return false;
}
// Driver function
public static void main(String[] args){
   BinarySearchTree tree1 = new BinarySearchTree();
/*
   16
   / \
  11 21
 / \ / \
9 13 17 26 */
      tree1.insert(16);
      tree1.insert(11);
      tree1.insert(21);
      tree1.insert(9);
      tree1.insert(13);
      tree1.insert(17);
      tree1.insert(26);
      tree1.isPairPresent(tree1.root1, 34);
   }
}

आउटपुट

Pair Found: 13 + 21 = 34

  1. C++ में संतुलित BST में दिए गए योग के साथ एक युग्म खोजें

    मान लीजिए कि हमारे पास एक संतुलित बाइनरी सर्च ट्री और एक लक्ष्य योग है, हमें एक ऐसी विधि को परिभाषित करना होगा जो यह जांचती है कि यह योग के साथ एक जोड़ी लक्ष्य योग के बराबर है या नहीं। इस मामले में। हमें यह ध्यान रखना होगा कि बाइनरी सर्च ट्री अपरिवर्तनीय है। तो, अगर इनपुट पसंद है तो आउटपुट होगा

  1. जांचें कि क्या दिए गए योग के साथ एक ट्रिपल बीएसटी में पायथन में मौजूद है

    मान लीजिए, हमें एक बाइनरी सर्च ट्री (BST) प्रदान किया जाता है जिसमें पूर्णांक मान और एक संख्या कुल होती है। हमें यह पता लगाना है कि क्या प्रदान किए गए बीएसटी में तीन तत्वों का कोई समूह है जहां तीन तत्वों का जोड़ आपूर्ति किए गए कुल मूल्य के बराबर है। तो, अगर इनपुट पसंद है टोटल =12, तो आउटपुट ट्रू

  1. दिए गए योग के साथ जोड़े खोजें जैसे कि जोड़ी तत्व पायथन में अलग-अलग बीएसटी में हों

    मान लीजिए कि हमारे पास दो दिए गए बाइनरी सर्च ट्री हैं और दूसरा योग दिया गया है; हमें दिए गए योग के संबंध में जोड़े खोजने होंगे ताकि प्रत्येक जोड़ी तत्व अलग-अलग बीएसटी में हों। तो, अगर इनपुट योग =12 जैसा है तो आउटपुट [(6, 6), (7, 5), (9, 3)] . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -