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

जांचें कि क्या दिया गया बाइनरी ट्री पायथन में रेड-ब्लैक ट्री की तरह ऊंचाई संतुलित है

मान लीजिए कि एक लाल-काला पेड़ है, यहाँ एक नोड की सबसे बड़ी ऊँचाई न्यूनतम ऊँचाई से अधिक से अधिक दोगुनी है। यदि हमारे पास बाइनरी सर्च ट्री है, तो हमें निम्नलिखित संपत्ति की जांच करनी होगी। प्रत्येक नोड के संबंध में, सबसे लंबी पत्ती से नोड पथ की लंबाई नोड से पत्ती तक के सबसे छोटे पथ पर दोगुने से अधिक नहीं है।

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

जांचें कि क्या दिया गया बाइनरी ट्री पायथन में रेड-ब्लैक ट्री की तरह ऊंचाई संतुलित है

तो आउटपुट सही होगा, क्योंकि यह संतुलित है।

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

  • एक फ़ंक्शन को हल करें() परिभाषित करें। यह जड़ लेगा, max_height, min_height
  • यदि रूट रिक्त है, तो
    • अधिकतम_ऊंचाई:=0, न्यूनतम_ऊंचाई:=0
    • सही लौटें
  • बाएं_अधिकतम:=0, बाएं_मिनट:=0
  • right_max:=0, right_min:=0
  • यदि हल (रूट.लेफ्ट, लेफ्ट_मैक्स, लेफ्ट_मिन) फाल्स के समान है, तो
    • झूठी वापसी
  • यदि हल (root.right, right_max, right_min) False के समान है, तो
    • झूठी वापसी
  • अधिकतम_ऊंचाई:=अधिकतम बाएं_अधिकतम और दाएं_अधिकतम + 1
  • न्यूनतम_ऊंचाई :=न्यूनतम बाएं_मिनट और दाएं_मिनट + 1
  • यदि max_height <=2 * min_height, तो
    • सही लौटें
  • झूठी वापसी
  • मुख्य विधि से निम्न कार्य करें -
  • अधिकतम_ऊंचाई:=0, न्यूनतम_ऊंचाई:=0
  • रिटर्न सॉल्व (रूट, max_height, min_height)

उदाहरण

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

class TreeNode:
   def __init__(self, key):
      self.data = key
      self.left = None
      self.right = None
def solve(root, max_height, min_height) :
   if (root == None) :
      max_height = min_height = 0
      return True
   left_max=0
   left_min=0
   right_max, right_min=0,0
   if (solve(root.left, left_max, left_min) == False) :
      return False
   if (solve(root.right, right_max, right_min) == False) :
      return False
   max_height = max(left_max, right_max) + 1
   min_height = min(left_min, right_min) + 1
   if (max_height <= 2 * min_height) :
      return True
   return False
def is_tree_balanced(root) :
   max_height, min_height = 0,0
   return solve(root, max_height, min_height)
root = TreeNode(10)
root.left = TreeNode(5)
root.right = TreeNode(100)
root.right.left = TreeNode(50)
root.right.right = TreeNode(150)
root.right.left.left = TreeNode(40)
print(is_tree_balanced(root))

इनपुट

root = TreeNode(10)
root.left = TreeNode(5)
root.right = TreeNode(100)
root.right.left = TreeNode(50)
root.right.right = TreeNode(150)
root.right.left.left = TreeNode(40)

आउटपुट

True

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

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

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

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

  1. पाइथन में सॉर्ट किए गए ऐरे को बाइनरी सर्च ट्री में कनवर्ट करें

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