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

पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं जांचने का प्रोग्राम

मान लीजिए हमें एक बाइनरी ट्री दी गई है। हमें ट्री से सबसे बड़ा सबट्री ढूंढना है जो बाइनरी सर्च ट्री (BST) है। हम BST का रूट नोड लौटाते हैं।

पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं जांचने का प्रोग्राम

इसलिए, यदि इनपुट है:

तो आउटपुट होगा:

पायथन में दिए गए बाइनरी ट्री में BST मौजूद है या नहीं जांचने का प्रोग्राम

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

  • पोस्ट-ऑर्डर ट्रैवर्सल का उपयोग करके प्रत्येक सबट्री की जांच करें
  • ट्रैक करें कि सबट्री BST है या नहीं
  • सबसे बड़े BST का रूट नोड लौटाएं

उदाहरण कार्यान्वयन

class TreeNode:
    def __init__(self, val, left=None, right=None):
        self.val = val
        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):
    if root is not None:
        print_tree(root.left)
        print(root.val, end=', ')
        print_tree(root.right)

def solve(root):
    c, m = 0, None
    
    def recurse(node):
        nonlocal c, m
        if node:
            left_val = recurse(node.left)
            right_val = recurse(node.right)
            count = -float("inf")
            if (node.left is None or node.left.val <= node.val) and (node.right is None or node.val <= node.right.val):
                count = left_val + right_val + 1
            if count > c:
                c = count
                m = node
            return count
        return 0
    
    recurse(root)
    return m

tree = make_tree([1, 4, 6, 3, 5])
print_tree(solve(tree))

इनपुट

tree = make_tree([1, 4, 6, 3, 5])
print_tree(solve(tree))

आउटपुट

3, 4, 5,
  1. पायथन में बाइनरी ट्री नोड के सिबलिंग मान को खोजने का प्रोग्राम पायथन में बाइनरी ट्री नोड के सिबलिंग मान को खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक मान k और एक बाइनरी सर्च ट्री है, जहां प्रत्येक नोड या तो एक लीफ है या इसमें 2 बच्चे हैं। हमें मान k वाले नोड को खोजना है और उसके सिबलिंग का मान वापस करना है।इसलिए, यदि इनपुट इस तरह हैk = 4, तो आउटपुट 10 होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −एक फ़ंक्शन util

  1. पायथन में ट्री के बाएं सबसे गहरे नोड को खोजने का प्रोग्राम पायथन में ट्री के बाएं सबसे गहरे नोड को खोजने का प्रोग्राम

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

  1. पायथन में बाइनरी ट्री पर k-लंबाई के पथ खोजने का प्रोग्राम पायथन में बाइनरी ट्री पर k-लंबाई के पथ खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री है जिसमें अद्वितीय मान हैं और हमारे पास एक अन्य मान k है, हमें ट्री में k-लंबाई के अद्वितीय पथों की संख्या ढूंढनी है। पथ पैरेंट से चाइल्ड या चाइल्ड से पैरेंट की ओर जा सकते हैं। हम दो पथों को अलग मानेंगे जब कोई नोड एक पथ में दिखाई देता है लेकिन दूसरे में नहीं। उदाह