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

पायथन में बीएसटी को क्रमबद्ध और अक्रमांकन करें

मान लीजिए कि हम एक बाइनरी सर्च ट्री को क्रमबद्ध और डीरियलाइज़ करने के लिए एक एल्गोरिथम डिज़ाइन करना चाहते हैं। सीरियलाइजेशन कुछ (डेटा संरचना या ऑब्जेक्ट) को बिट्स के अनुक्रम में परिवर्तित करने की प्रक्रिया है ताकि इसे फ़ाइल या मेमोरी बफर में संग्रहीत किया जा सके, या नेटवर्क कनेक्शन लिंक पर प्रसारित किया जा सके। इसे बाद में फिर से बनाया जा सकता है कि प्रक्रिया अक्रमांकन है।

इसलिए, यदि इनपुट [5,2,9,1,3,7] जैसा है, तो आउटपुट सीरियलाइज्ड आउटपुट 5.2.9.1.3.7. (इनऑर्डर ट्रैवर्सल)

पायथन में बीएसटी को क्रमबद्ध और अक्रमांकन करें

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन को परिभाषित करें serialize() । यह जड़ लेगा

  • रेस :=एक नई सूची

  • एक कतार परिभाषित करें और रूट डालें

  • जबकि कतार खाली नहीं है, करें

    • जबकि कतार खाली नहीं है, करें

      • वर्तमान:=कतार[0]

      • रेस के अंत में करंट डालें

      • कतार से पहला तत्व हटाएं

      • अगर करंट गैर-शून्य है, तो

        • लूप से बाहर आएं

    • अगर करंट शून्य है, तो

      • लूप से बाहर आएं

    • अगर current.left शून्य नहीं है, तो

      • कतार के अंत में current.left डालें

    • अन्यथा,

      • कतार के अंत में कोई नहीं डालें

    • अगर current.right शून्य नहीं है, तो

      • कतार के अंत में current.right डालें

    • अन्यथा,

      • कतार के अंत में कोई नहीं डालें

  • s:=रिक्त स्ट्रिंग

  • मैं के लिए 0 से लेकर रेस के आकार तक के लिए, करें

    • अगर रेस [i] शून्य नहीं है, तो

      • s :=s concatenate res[i].data

    • अन्यथा,

      • s :=s "N" को जोड़ना

    • अगर मैं रेस -1 के आकार के समान हूं, तो

      • लूप से बाहर आएं

    • s :=s concatenate "।"

  • वापसी एस

  • एक फ़ंक्शन को परिभाषित करें deserialize() । यह डेटा लेगा

  • डेटा:=डॉट का उपयोग करके डेटा को विभाजित करने के बाद भागों की एक सूची

  • स्टैक :=एक नई सूची

  • अगर डेटा [0] 'एन' के समान है, तो

    • कोई नहीं लौटाएं

  • रूट:=डेटा डेटा के साथ एक नया नोड बनाएं[0]

  • स्टैक के अंत में रूट डालें

  • मैं :=1

  • वर्तमान:=0

  • जबकि मैं <डेटा का आकार, करता हूं

    • बायां:=झूठा

    • अगर डेटा [i] 'एन' के समान नहीं है, तो

      • अस्थायी:=डेटा डेटा के साथ एक नया नोड बनाएं[i]

      • स्टैक [वर्तमान]। बाएं:=अस्थायी

      • स्टैक के अंत में अस्थायी डालें

    • अन्यथा,

      • स्टैक [वर्तमान]। बाएं:=कोई नहीं

    • मैं :=मैं + 1

    • अगर डेटा [i] 'एन' के समान नहीं है, तो

      • अस्थायी:=डेटा डेटा के साथ एक नया नोड बनाएं[i]

      • स्टैक [वर्तमान]। दाएं:=अस्थायी

      • स्टैक के अंत में अस्थायी डालें

    • अन्यथा,

      • स्टैक [वर्तमान]। दाएं:=कोई नहीं

    • वर्तमान:=वर्तमान + 1

    • मैं :=मैं + 1

  • वापसी जड़

उदाहरण

आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
         break
      else:
         que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
def print_tree(root):
   #print using inorder traversal
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)
class Codec:
   def serialize(self, root):
      res =[]
      queue = [root]
      while queue:
         while True and queue:
            current = queue[0]
            res.append(current)
            queue.pop(0)
            if current:
               break
         if not current:
            break
         if current.left:
            queue.append(current.left)
         else:
            queue.append(None)
         if current.right:
            queue.append(current.right)
         else:
            queue.append(None)
      s=""
      for i in range(len(res)):
         if res[i]:
            s+=str(res[i].data)
         else:
            s+="N"
         if i == len(res)-1:
            break
         s+="."
      return s
   def deserialize(self, data):
      data = data.split(".")
      stack = []
      if data[0]=='N':
         return None
      root = TreeNode(int(data[0]))
      stack.append(root)
      i = 1
      current = 0
      while i <len(data):
         left= False
         if data[i] !='N':
            temp = TreeNode(int(data[i]))
            stack[current].left = temp
            stack.append(temp)
         else:
            stack[current].left = None
         i+=1
         if data[i] !='N':
            temp = TreeNode(int(data[i]))
            stack[current].right = temp
            stack.append(temp)
         else:
            stack[current].right = None
         current+=1
         i+=1
         return root

ob = Codec()
root = make_tree([5,2,9,1,3,7])
ser = ob.serialize(root)
print('Serialization:',ser)
print_tree(ob.deserialize(ser))

इनपुट

[5,2,9,1,3,7]

आउटपुट

Serialization: 5.2.9.1.3.7.N.N.N.N.N.N.N
1, 2, 3, 5, 7, 9,

  1. पायथन प्रोग्राम के साथ डेटा विश्लेषण और विज़ुअलाइज़ेशन

    इस ट्यूटोरियल में, हम pandas . जैसे मॉड्यूल का उपयोग करके डेटा विश्लेषण और विज़ुअलाइज़ेशन के बारे में जानेंगे और matplotlib पायथन . में . डेटा विश्लेषण चीजों के लिए पायथन एक उत्कृष्ट फिट है। मॉड्यूल स्थापित करें पांडा और matplotlib निम्न आदेशों का उपयोग करते हुए। pip install pandas pip install ma

  1. पायथन डेटा विश्लेषण और विज़ुअलाइज़ेशन

    पांडा डेटा साइंस और एनालिटिक्स के लिए सबसे लोकप्रिय पायथन लाइब्रेरी में से एक है। पांडा पुस्तकालय का उपयोग डेटा हेरफेर, विश्लेषण और सफाई के लिए किया जाता है। यह निम्न-स्तरीय NumPy पर एक उच्च-स्तरीय अमूर्त है जो विशुद्ध रूप से C में लिखा गया है। इस खंड में, हम कुछ सबसे महत्वपूर्ण (अक्सर उपयोग की जाने

  1. पायथन में डेटा विश्लेषण और विज़ुअलाइज़ेशन?

    पायथन डेटा विश्लेषण और विज़ुअलाइज़ेशन के लिए मुख्य रूप से सुन्न, पांडा, मैटप्लोटलिब, सीबॉर्न आदि के लिए कई पुस्तकालय प्रदान करता है। इस खंड में, हम डेटा विश्लेषण और विज़ुअलाइज़ेशन के लिए पांडा पुस्तकालय पर चर्चा करने जा रहे हैं, जो एक खुला स्रोत पुस्तकालय है जो सुन्न के ऊपर बनाया गया है। यह हमें ते