जावामध्ये बायनरी ट्री प्री-ऑर्डर केलेली ट्रिप कशी बनवायची हा माझा दुसरा लेख आहे. पहिल्या भागात, मी तुम्हाला रिकर्सन द्वारे प्री-ऑर्डर बायनरी ट्रीमधून कसे जायचे ते दाखवले, या लेखात तुम्ही प्री-ऑर्डर ट्रिप कशी करावी हे शिकाल पुनरावृत्ती न वापरता. पुनरावृत्ती समाधान शक्य असल्यास – पुनरावृत्ती उपाय का शिकला पाहिजे हे लिहायला सोपे असल्यास आपण विचार करत असाल. बरं, या प्रकारचे प्रश्न बहुतेक मिंग प्रोग्रामिंग जॉब इंटरव्ह्यूमध्ये विचारले जातात – मुलाखत घेणारे उमेदवार दोघांसह किती आरामदायक आहेत हे पाहणे पसंत करतात पुनरावृत्ती: तसेच इतर डेटा स्ट्रक्चर्सचा वापर – पुनरावृत्ती.

याव्यतिरिक्त, पुनरावृत्ती समाधान देखील बर्‍याचदा रिअल-टाइममध्ये पसंत केले जाते, कारण पुनरावृत्ती समाधान नेहमी स्टॅकओव्हरफ्लो त्रुटीला सामोरे जाऊ शकते कारण नोड्सची संख्या वाढते आणि पुनरावृत्ती अधिक तीव्र होते. या कारणास्तव, डुप्लिकेट सोल्यूशन सुरक्षित मानले जाते, possible शक्य असल्यास, आपण नेहमी त्याचा वापर आपल्या उत्पादन कोडसाठी करावा.

थेट पुनरावलोकनासाठी पूर्व-ऑर्डर करणे हे एक सखोल अल्गोरिदम आहे जेथे भावंडांसह प्रवास करण्यापूर्वी झाडाच्या खोलीचा प्रथम अभ्यास केला जातो. मध्ये: पूर्व-ऑर्डर हस्तांतरणप्रथम नोड किंवा रूटला भेट दिली जाते, नंतर डावी उपवृक्ष, आणि नंतर उजवी उपवृक्ष, म्हणून ती ओळखली जाते NLR (नोड-डावे-उजवे) अल्गोरिदम

तुम्हाला माहित असेल की जेव्हा तुम्ही रिकर्सन वापरता, तेव्हा मेथड कॉल अंतर्गत स्टॅकमध्ये साठवले जातात, जे अल्गोरिदम मुख्य कामावर पोहोचल्यावर आपोआप डिस्चार्ज होतात.

जेव्हा पुनरावृत्तीला परवानगी नसते, तेव्हा आपण समान प्रभाव निर्माण करण्यासाठी स्टॅक डेटा स्ट्रक्चर वापरू शकता, खरं तर, पुनरावृत्ती अल्गोरिदम पुनरावृत्ती करण्यासाठी हे देखील एक सामान्य तंत्र आहे.

बीटीडब्ल्यू, जर तुम्हाला स्टॅक, क्यू, अॅरे, लिंक्डलिस्ट, बायनरी ट्री आणि हॅश टेबल सारख्या आवश्यक डेटा स्ट्रक्चरची माहिती नसेल तर मी चांगल्या अभ्यासक्रमांमध्ये सामील होण्याचा सल्ला देतो डेटा स्ट्रक्चर्स – अल्गोरिदम. जावा वापरून डीप डायव्ह: उडेमी येथे, डेटा अल्गोरिदम कसे मास्टर करावे हे शिकण्याचा हा एक उत्तम अभ्यासक्रम आहे. जरी आपल्याला डेटाची रचना माहित असली तरी त्याचा वापर आपल्या ज्ञानाला आणखी मजबूत करण्यासाठी केला जाऊ शकतो.

मागच्या दिशेने न जाता जावामध्ये संक्रमण पूर्व-ऑर्डर करा

यात काही शंका नाही की पूर्व-ऑर्डरसाठी पुनरावृत्ती अल्गोरिदम सुवाच्य, स्पष्ट आणि संक्षिप्त होते. आपण नेहमी अशा अल्गोरिदमला पुनरावृत्ती करण्यापेक्षा प्राधान्य दिले पाहिजे, परंतु जर आपल्याला पुनरावृत्तीशिवाय ही समस्या सोडवण्यास सांगितले गेले असेल तर आपल्याकडे पर्याय नाही. ते पुनरावृत्ती अल्गोरिदम चालू करण्यासाठी आवर्ती एक, आपण स्टॅक वापरू शकता.

स्टॅक रिक्त होईपर्यंत आपण रॅक नोडला स्टॅक և लूपमध्ये ढकलून बायपास करणे सुरू करता. प्रत्येक वेळी जेव्हा तुम्ही स्टॅकमध्ये शेवटचा आयटम घालता, तेव्हा तुम्ही त्याचे मूल्य प्रिंट करता. म्हणजे तुम्ही त्याला भेट दिली. आता, नोड्स डावीकडे आणि उजवीकडे दाबा स्टॅक: जर ते अवैध नसतील.

डावे आणि उजवे नोड्स ढकलण्याची प्रक्रिया गंभीर आहे. प्रथम तुम्हाला उजव्या उप-झाडाला, त्यानंतर डाव्या उप-झाडाला धक्का द्यावा लागेल, कारण पूर्व-ऑर्डरच्या बाबतीत आम्ही नोडनंतर डाव्या उप-झाडाला भेट देतो.

पुढील पुनरावृत्ती मध्ये, जेव्हा आपण कॉल कराल पॉप () हे डावे नोड परत करेल कारण स्टॅक एक LIFO डेटा स्ट्रक्चर आहे, स्टॅकबद्दल अधिक जाणून घेण्यासाठी आपण डेटा स्ट्रक्चर्सच्या सर्वसमावेशक कोर्समध्ये सामील होऊ शकता և अल्गोरिदम अल्गोरिदम և डेटा स्ट्रक्चर्स – भाग 1 2: बहुलवादाबद्दल.

जावामध्ये दुहेरी प्री-ऑर्डर पार करण्यासाठी अचूक पायऱ्या येथे आहेत.

  1. रिक्त पिरॅमिड तयार करा
  2. स्टॅकमध्ये रूट दाबा
  3. स्टॅक रिक्त होईपर्यंत फिरवा
  4. शेवटचा नोड घाला its त्याचे मूल्य प्रिंट करा
  5. जर ते अवैध नसतील तर उजवा և डावा नोड दाबा
  6. चरण 4 ते 6 ची पुनरावृत्ती करा.

आणि हे अल्गोरिदम लागू करण्याचे कार्य येथे आहे

public void preOrderWithoutRecursion() {
    Stack<TreeNode> nodes = new Stack<>();
    nodes.push(root);

    while (!nodes.isEmpty()) {
      TreeNode current = nodes.pop();
      System.out.printf("%s ", current.data);

      if (current.right != null) {
        nodes.push(current.right);
      }
      if (current.left != null) {
        nodes.push(current.left);
      }
    }
  }

आपण पाहू शकता की आम्ही डाव्या नोडच्या आधी उजव्या नोडला धक्का देत आहोत जेणेकरून आमचा प्रोग्राम उजव्या नोडच्या आधी डाव्या नोडवर प्रक्रिया करू शकेल, प्री-ऑर्डर अल्गोरिदमनुसार आवश्यक असेल. तसे, जर तुम्ही मुलाखतीच्या दृष्टिकोनातून बायनरी शिकत असाल तर तुम्ही तपासू शकता जावा मध्ये डेटा संरचना. मुलाखत अपडेट अधिक वृक्ष-आधारित कामांसाठी.

प्रीऑर्डर संक्रमण वापरून बायनरी ट्री कापण्यासाठी जावा प्रोग्राम

प्री-ऑर्डरमध्ये बायनरी नोड्स छापण्यासाठी आमचा संपूर्ण जावा प्रोग्राम येथे आहे. आपण रूट नोडला स्टॅकवर ढकलून प्रारंभ करून प्रारंभ करता. आम्ही बायनरी ट्री ट्यूटोरियल मध्ये पूर्वी वापरलेला समान धडा वापरला.

हे: बायनरी ट्री धडा आपला बायनरी ट्री आहे ट्रीनोड: तुमचे वैयक्तिक झाड नोड आहेत. या वेळी, मी बायनरी ट्रीमध्ये एक उदाहरण तयार करण्यासाठी लॉजिक हलवत आहे बायनरी ट्री मुख्य धडा. त्यामुळे तुम्हाला प्रत्येक वेळी मुख्य () पद्धतीने नवीन झाड तयार करण्याची गरज नाही.

जर तुम्हाला स्टॅक डेटा स्ट्रक्चरबद्दल अधिक जाणून घ्यायचे असेल, तर येथे प्री-ऑर्डरिंग अल्गोरिदम आकृती आहे जी पायऱ्या स्पष्ट करेल.

जावा मध्ये मागे न जाता सहलीची पूर्व-मागणी करा

जावा मध्ये डबल प्री-ऑर्डर बायनरी ट्री कटिंग

आणि येथे आमच्या पूर्ण कोडचे उदाहरण आहे जे आपण आपल्या पसंतीच्या IDE सह चालवू शकता ग्रहण किंवा: IntelliJIDEA:. तुम्हाला हवे असल्यास, तुम्ही कमांड लाइन वरून चालवू शकता, जर तुमच्याकडे JAVA_HOME आधीच कॉन्फिगर केलेले असेल तर և जावा चालू आहे.

import java.util.Stack;

/*
 * Java Program to traverse a binary tree 
 * using PreOrder traversal without recursion. 
 * In PreOrder the node value is printed first,
 * followed by visit to left and right subtree.
 * 
 * input:
 *     a
 *    / 
 *   b   e
 *  /    
 * c   d   f
 * 
 * output: a b c d e f 
 */

public class Main {

  public static void main(String[] args) throws Exception {

    // construct the binary tree given in question
    BinaryTree bt = BinaryTree.create();

    // traversing binary tree in PreOrder without using recursion
    System.out.println("printing nodes of a binary tree in preOrder
                         without recursion");

    bt.preOrderWithoutRecursion();

  }

}

class BinaryTree {
  static class TreeNode {
    String data;
    TreeNode left, right;

    TreeNode(String value) {
      this.data = value;
      left = right = null;
    }

    boolean isLeaf() {
      return left == null ? right == null : false;
    }

  }

  // root of binary tree
  TreeNode root;

  /**
   * Java method to visit tree nodes in PreOrder traversal without recursion.
   */
  public void preOrderWithoutRecursion() {
    Stack<TreeNode> nodes = new Stack<>();
    nodes.push(root);

    while (!nodes.isEmpty()) {
      TreeNode current = nodes.pop();
      System.out.printf("%s ", current.data);

      if (current.right != null) {
        nodes.push(current.right);
      }
      if (current.left != null) {
        nodes.push(current.left);
      }
    }
  }

  /**
   * Java method to create binary tree with test data
   * 
   * @return a sample binary tree for testing
   */
  public static BinaryTree create() {
    BinaryTree tree = new BinaryTree();
    TreeNode root = new TreeNode("a");
    tree.root = root;
    tree.root.left = new TreeNode("b");
    tree.root.left.left = new TreeNode("c");

    tree.root.left.right = new TreeNode("d");
    tree.root.right = new TreeNode("e");
    tree.root.right.right = new TreeNode("f");

    return tree;
  }

}

Output
printing nodes of a binary tree in preOrder using recursion
a b c d e f 

एवढे जावा मध्ये PreOrder स्विच वापरून बायनरी ट्री वर कसे जायचे. डाव्या-उजव्या सबट्री नोडला भेट देण्याची प्रक्रिया महत्वाची आहे, कारण ती तुमचे स्विचिंग अल्गोरिदम ठरवते. जर तुम्ही नोडला भेट दिलीत, तर याचा अर्थ तो पूर्व-ऑर्डर केलेला आहे, जर तुम्ही नोडला भेट दिलीत, तर याचा अर्थ असा की ते InOrder आहे, last जेव्हा तुम्ही शेवटच्या नोडला भेट दिली, तेव्हा त्याला पोस्टऑर्डर स्विच म्हणतात.

इतर: बायनरी ट्री -डेटा स्ट्रक्चर मॅन्युअल तुम्हाला अभ्यास करायला आवडेल

  • जावामध्ये बायनरी सर्च ट्री कशी लागू करावी? (कार्यक्रम:)
  • डेटा संरचना al अल्गोरिदम शिकण्यासाठी माझे आवडते विनामूल्य अभ्यासक्रम (अभ्यासक्रम)
  • जावा मध्ये नियमित संक्रमण कसे करावे? (उपाय)
  • अल्गोरिदमची 10 पुस्तके जी प्रत्येक प्रोग्रामरने वाचावीत (पुस्तके)
  • जावामध्ये सामान्य वापरून एकत्रित यादी कशी बनवायची? (उपाय)
  • मागच्या बाजूस न वापरता बायनरी ट्रीची पूर्व-मागणी कशी करावी. (उपाय)
  • 5 डेटा स्ट्रक्चर և मुलाखत कोडिंग अल्गोरिदम पुस्तके (यादी:)
  • जावामध्ये डुप्लिकेट अॅरे घटक कसे प्रिंट करावे? (उपाय)
  • जावा मध्ये अॅरे रिव्हर्स कसे करावे? (उपाय)
  • जावा मध्ये वेगळी लिंक केलेली यादी कशी उलट करावी? (उपाय)
  • 50+ डेटा स्ट्रक्चर և अल्गोरिदम मुलाखत समस्या (प्रश्न)
  • एका पासचा वापर करून लिंक केलेल्या सूचीचा मधला घटक कसा शोधायचा? (उपाय)
  • जावामध्ये लिंक केलेल्या सूचीच्या तळापासून तिसरा आयटम कसा शोधायचा? (उपाय)
  • विकासकांसाठी 10 मोफत डेटा स्ट्रक्चर अल्गोरिदम अभ्यासक्रम (अभ्यासक्रम)
  • बॅकट्रॅकिंगशिवाय जावा द्वारे नेव्हिगेट कसे करावे? (उपाय)
  • जावा मध्ये प्री-ऑर्डर ट्रिप कशी करावी? (उपाय)
  • मुलाखतींमधून 100+ डेटा स्ट्रक्चर कोडिंग समस्या (प्रश्न)

हा लेख आतापर्यंत वाचल्याबद्दल धन्यवाद. तुम्हाला हे आवडल्यास बायनरी शोध अल्गोरिदम मॅन्युअल मग कृपया आपले मित्र आणि सहकाऱ्यांसह शेअर करा. आपल्याकडे काही प्रश्न किंवा टिप्पण्या असल्यास, कृपया एक टिप्पणी द्या.

पुनश्च: – जर तुम्ही डेटा स्ट्रक्चर և अल्गोरिदमबद्दल तुमची समज सुधारण्यासाठी मोफत अल्गोरिदम अभ्यासक्रम शोधत असाल तर तुम्ही हे देखील तपासावे विनामूल्य नवशिक्यांसाठी जावा मध्ये डेटा रचना उडेम वर अभ्यासक्रम. हे अल्गोरिदम तज्ञाने लिहिले आहे – पूर्णपणे विनामूल्य.