Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

Python में बाइनरी सर्च ट्री मान्य करें

समस्या

मान लीजिए हमारे पास एक बाइनरी ट्री है, यह निर्धारित करें कि यह एक वैध बाइनरी सर्च ट्री (BST) है या नहीं। मान लें कि BST को इस प्रकार परिभाषित किया गया है:

  • एक नोड का बायाँ उपट्री केवल उन नोड्स को रखता है जिनकी कुंजी नोड की कुंजी से छोटी होती है।
  • एक नोड का दायाँ उपट्री केवल उन नोड्स को रखता है जिनकी कुंजी नोड की कुंजी से बड़ी होती है।
  • बाएँ और दाएँ दोनों उपट्री भी बाइनरी सर्च ट्री होने चाहिए।

उदाहरण के लिए, यदि ट्री इस तरह है:

Python में बाइनरी सर्च ट्री मान्य करें

आउटपुट true होगा।

समाधान दृष्टिकोण

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

  • solve() नामक एक पुनरावर्ती फ़ंक्शन बनाएं, यह रूट, मिन और मैक्स लेगा, विधि इस प्रकार होगी:
  • यदि रूट null है, तो true लौटाएं
  • यदि रूट का मान <= मिन या रूट का मान >= मैक्स, तो false लौटाएं
  • (solve(रूट का बायाँ, मिन, रूट का मान) AND solve(रूट का दायाँ, रूट का मान, मैक्स)) लौटाएं
  • प्रारंभ में solve() विधि को रूट, और -inf को मिन और inf को मैक्स के रूप में पास करके कॉल करें।

उदाहरण (Python):

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

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 class Solution(object):    def isValidBST(self, root):       return self.solve(root,-1000000000000000000000,1000000000000000000000)    def solve(self,root,min_val,max_val):       if root == None or root.data == 0:          return True       if (root.data <= min_val or root.data >=max_val):          return False       return self.solve(root.left,min_val,root.data) and self.solve(root.right,root.data,max_val) ob1 = Solution() tree = make_tree([3,1,4,None,2,None,5]) print(ob1.isValidBST(tree)) tree = make_tree([5,1,4,None,None,3,6]) print(ob1.isValidBST(tree))

इनपुट

[3,1,4,null,2,null,5] [5,1,4,null,null,3,6]

आउटपुट

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

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

  1. पायथन में बाइनरी ट्री उल्टा करें पायथन में बाइनरी ट्री उल्टा करें

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमारा कार्य एक उल्टा बाइनरी ट्री बनाना है। यदि ट्री नीचे जैसा है: उल्टा ट्री इस तरह होगा: इसे हल करने के लिए हम एक पुनरावर्ती दृष्टिकोण का उपयोग करेंगे: यदि रूट null है, तो वापस करें बाएं और दाएं पॉइंटर्स को स्वैप करें बाएं सबट्री और दाएं सबट्री के लिए पुनर

  1. पायथन में क्रमबद्ध सरणी को बाइनरी सर्च ट्री में बदलें पायथन में क्रमबद्ध सरणी को बाइनरी सर्च ट्री में बदलें

    मान लीजिए हमारे पास एक क्रमबद्ध सरणी A है। हमें एक ऊंचाई-संतुलित बाइनरी सर्च ट्री उत्पन्न करना है। इस समस्या में, एक ऊंचाई-संतुलित बाइनरी ट्री वास्तव में एक बाइनरी ट्री है जिसमें हर नोड के दो सबट्री की गहराई 1 से अधिक नहीं होती। मान लीजिए सरणी [-10, -3, 0, 5, 9] जैसी है। तो एक संभावित आउटपुट होगा: