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

Python से गलत बाइनरी ट्री को कैसे ठीक करें (एरोनियस राइट पॉइंटर)?

BFS से एरोनियस राइट चाइल्ड पॉइंटर (सेम लेवल पर पॉइंट करता हुआ) ढूंढें और उस नोड को उसके डिसेंडेंट्स सहित डिलीट करें (टारगेट नोड छोड़कर)।

एल्गोरिदम

  • क्यू से BFS ट्रैवर्सल (collections.deque)।
  • parent मैप: चाइल्ड -> (पैरेंट, is_left)।
  • visited सेट से डुप्लिकेट विजिट डिटेक्ट करें (एरोनियस लिंक)।
  • जब डुप्लिकेट मिले: ग्रैंडपैरेंट ढूंढें और उसका लेफ्ट/राइट पॉइंटर None करें।
  • रूट रिटर्न करें।

उदाहरण कोड


import collections

class TreeNode:
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right

def solve(root):
    q = collections.deque([root])
    p, visited = dict(), set()
    while q:
        cur = q.popleft()
        if cur in visited:
            grand_p, is_left = p[p[cur][0]]
            if is_left: grand_p.left = None
            else: grand_p.right = None
            return root
        visited.add(cur)
        if cur.left:
            p[cur.left] = (cur, 1)
            q.append(cur.left)
        if cur.right:
            p[cur.right] = (cur, 0)
            q.append(cur.right)
    return root

# टेस्ट: 4 का राइट पॉइंटर गलती से 6 पर -> 4 डिलीट, इनऑर्डर: 2,3,5,6,7,8

इनपुट/आउटपुट

इनपुट: ट्री [5,3,7,2,4,6,8] + एरोनियस लिंक 4→6
आउटपुट (इनऑर्डर): 2, 3, 5, 6, 7, 8

  1. पायथन में बाइनरी ट्री के किसी भी पथ का सबसे बड़ा योग खोजने का प्रोग्राम पायथन में बाइनरी ट्री के किसी भी पथ का सबसे बड़ा योग खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें रूट नोड से लीफ नोड तक जाने वाले किसी भी पथ का सबसे बड़ा योग ढूंढना है। उदाहरण के लिए, यदि इनपुट जैसा है: तो आउटपुट 29 होगा क्योंकि रूट से, यदि हम पथ 5-<9-<7-<8 का पालन करते हैं तो जोड़ के बाद यह 29 होगा। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:

  1. पायथन में बाइनरी ट्री की अधिकतम चौड़ाई खोजने का प्रोग्राम पायथन में बाइनरी ट्री की अधिकतम चौड़ाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें ट्री में किसी भी स्तर की अधिकतम चौड़ाई ढूंढनी है। यहां एक स्तर की चौड़ाई उन नोड्स की संख्या है जो बाएं सबसे नोड और दाएं सबसे नोड के बीच रखे जा सकते हैं। उदाहरण के लिए, यदि इनपुट है: तो आउटपुट होगा 2। हल करने के चरण एक मैप d बनाएं, न्यूनतम और अधिकतम मान

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

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