কম্পিউটার টিউটোরিয়াল

পাইথনে BST-এ নির্দিষ্ট রেঞ্জে থাকা নোডের সংখ্যা খুঁজে বের করার প্রোগ্রাম


মনে করুন একটি BST এবং l, r দুটি বাউন্ড দেওয়া আছে। রুটে থাকা নোডগুলোর মধ্যে l এবং r (inclusive) রেঞ্জে কতগুলো নোড আছে সেটি গণনা করতে হবে।

উদাহরণস্বরূপ, l=7, r=13 হলে আউটপুট ৩ (৮, ১০, ১২)। ছবি দেওয়া আছে।

সমাধানের ধাপসমূহ

  • stack := রুট দিয়ে স্ট্যাক, count := 0
  • যখন stack খালি নয়,
    • node := stack.pop()
    • যদি node নন-নাল,
      • যদি l <= node.data <= r, count++, stack-এ node.right, node.left পুশ করুন
      • অন্যথায় যদি node.data < l, stack-এ node.right পুশ করুন
      • অন্যথায়, stack-এ node.left পুশ করুন
  • count ফেরত দিন

উদাহরণ

from collections import deque
class TreeNode:
    def __init__(self, data, left = None, right = None):
        self.data = data
        self.left = left
        self.right = right

class Solution:
    def solve(self, root, l, r):
        stack, count = [root], 0
        while stack:
            node = stack.pop()
            if node:
                if l <= node.data <= r:
                    count += 1
                    stack += [node.right, node.left]
                elif node.data < l:
                    stack += [node.right]
                else:
                    stack += [node.left]
        return count

ob = Solution()
root = TreeNode(12)
root.left = TreeNode(8)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(10)
print(ob.solve(root, 7,13))

ইনপুট

root = TreeNode(12) root.left = TreeNode(8) root.right = TreeNode(15) root.left.left = TreeNode(3) root.left.right = TreeNode(10) 7,13

আউটপুট

3
  1. Python দিয়ে সব নোডে পৌঁছাতে মিনিমাম ভার্টেক্স বের করার প্রোগ্রাম

  2. Python দিয়ে বাইনারি ট্রিতে ভালো লিফ নোড পেয়ার সংখ্যা বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা

  4. একটি সংখ্যার সম ফ্যাক্টরের যোগফল বের করার পাইথন প্রোগ্রাম