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

पायथन का उपयोग करके दिए गए नोड्स के बाइनरी ट्री के सबसे कम सामान्य पूर्वज का पता लगाने का कार्यक्रम

मान लीजिए, हमें एक बाइनरी ट्री दिया गया है और हमें पेड़ में सभी नोड्स के सबसे कम सामान्य पूर्वज का पता लगाने के लिए कहा गया है। बाइनरी ट्री में सबसे कम सामान्य पूर्वज सबसे निचला नोड होता है, जिसमें नोड x1, x2, x3,...., xn वंशज होते हैं। एक विशेष नोड स्वयं का वंशज भी हो सकता है। हमें नोड ढूंढना होगा और इसे आउटपुट के रूप में वापस करना होगा। इनपुट पेड़ का रूट नोड और उन नोड्स की सूची है जिनके पूर्वज को हमें ढूंढना है।

तो, अगर इनपुट पसंद है

पायथन का उपयोग करके दिए गए नोड्स के बाइनरी ट्री के सबसे कम सामान्य पूर्वज का पता लगाने का कार्यक्रम

और जिन नोड्स के पूर्वजों को हमें खोजना है, उनकी सूची [6, 8] है; तो आउटपुट 7 होगा।

आउटपुट 7 है, क्योंकि निम्नतम नोड जिनमें से 6 और 8 नोड वंशज हैं, 7 हैं।

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

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

    • यदि नोड शून्य के समान है, तो

      • वापसी नोड

    • अन्यथा जब नोड नोड्स में प्रीसेट हो, तब

      • वापसी नोड

    • बाएँ:=fn (नोड के बाएँ),

    • दाएँ:=fn (नोड के दाएँ)

    • यदि बाएँ और दाएँ शून्य नहीं हैं, तो

      • वापसी नोड

    • अन्यथा,

      • यदि बाएँ या दाएँ शून्य नहीं हैं, तो

        • वापसी नोड

  • नोड्स:=एक नई सूची

  • नोड_सूची में प्रत्येक तत्व के लिए, करें

    • नोड्स के अंत में search_node(root, elem) डालें

  • नोड्स:=नोड्स से एक नया सेट

  • वापसी fn(रूट)

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

उदाहरण

import collections
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 search_node(root, element):
   if (root == None):
      return None
   if (root.data == element):
      return root
   res1 = search_node(root.left, element)
   if res1:
      return res1
   res2 = search_node(root.right, element)
   return res2
def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)
def solve(root, node_list):
   nodes = []
   for elem in node_list:
      nodes.append(search_node(root, elem))
      nodes = set(nodes)
def fn(node):
   if not node:
      return node
   elif node in nodes:
      return node
      left, right = fn(node.left), fn(node.right)
      return node if left and right else left or right
   return fn(root)
root = make_tree([5, 3, 7, 2, 4, 6, 8])
print(solve(root, [6,8]).data)

इनपुट

make_tree([5, 3, 7, 2, 4, 6, 8]), [6, 8]

आउटपुट

7

  1. एक पूर्वज को खोजने का कार्यक्रम जो पायथन में एक बाइनरी ट्री में दो तत्वों में से एक है

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, और हमारे पास दो नंबर ए और बी भी हैं, हमें सबसे कम नोड का मान ज्ञात करना है जिसमें ए और बी वंशज हैं। हमें यह ध्यान रखना होगा कि एक नोड स्वयं का वंशज हो सकता है। तो, अगर इनपुट पसंद है a =6, b =2, तो आउटपुट 4 होगा इसे हल करने के लिए, हम इन चरणों का पालन कर

  1. पायथन में एक बाइनरी ट्री का सबसे कम सामान्य पूर्वज

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें दो दिए गए नोड्स के सबसे कम सामान्य पूर्वज नोड्स को खोजना होगा। दो नोड्स p और q का LCA वास्तव में पेड़ में सबसे कम नोड के रूप में होता है जिसमें p और q दोनों डीसेंटेंट होते हैं। तो अगर बाइनरी ट्री [3,5,1,6,2,0,8,null,null,7,4] जैसा है। पेड़ जैसा होगा -

  1. पायथन में एक बाइनरी सर्च ट्री का सबसे कम सामान्य पूर्वज

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हमें दो दिए गए नोड्स के सबसे कम सामान्य पूर्वज नोड्स को खोजना होगा। दो नोड्स p और q का LCA वास्तव में पेड़ में सबसे कम नोड के रूप में होता है जिसमें p और q दोनों डीसेंटेंट होते हैं। तो अगर बाइनरी ट्री [6, 2, 8, 0, 4, 7, 9, नल, नल, 3, 5] जैसा है। पेड़ जै