ধরুন আমাদের একটি BST আছে, এবং আমাদেরও বাম এবং ডান সীমা l এবং r আছে, আমাদেরকে রুটের সমস্ত নোডের গণনা খুঁজে বের করতে হবে যার মানগুলি l এবং r (অন্তর্ভুক্ত) এর মধ্যে উপস্থিত রয়েছে।
সুতরাং, যদি ইনপুট মত হয়
l =7, r =13, তাহলে আউটপুট হবে 3, যেহেতু তিনটি নোড আছে:8, 10, 12।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব−
-
স্ট্যাক :=একটি স্ট্যাক এবং প্রথমে রুট সন্নিবেশ করুন, গণনা করুন :=0
-
স্ট্যাক খালি না থাকার সময়, করুন
-
নোড :=স্ট্যাকের শীর্ষ উপাদান, এবং পপ উপাদান
-
যদি নোড নাল না হয়, তাহলে
-
যদি l <=নোডের ডেটা <=r, তাহলে
-
গণনা :=গণনা + 1
-
স্ট্যাক :=নোডের ডানদিকে এবং নোডের বামে স্ট্যাকে ধাক্কা দিন
-
-
অন্যথায় যখন নোডের ডেটা
-
স্ট্যাক :=স্ট্যাকের মধ্যে নোডের ডানদিকে পুশ করুন
-
অন্যথায়,
-
স্ট্যাক :=স্ট্যাকের মধ্যে নোডের বাম দিকে ধাক্কা দিন
-
-
-
-
ফেরত গণনা
উদাহরণ
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