মোড:
এক সেট ডেটার মোড হলো সে সংখ্যা যা সেটে সবচেয়ে বেশি বার রিপিট হয়েছে। যেমন: ২, ৩, ১, ৩, ৪, ২, ৩, ১ এই ডেটাসেটে ৩ মোড কারণ এটি সর্বোচ্চ বার (৩ বার) এসেছে।
বাইনারি সার্চ ট্রি
একটি ট্রি ডিএস ভ্যালিড BST হবে যদি নিচের শর্তগুলো পূরণ হয়:
এক নোডের বাম সাবট্রিতে শুধু সেই নোডের কি চেয়ে ছোট বা সমান কি ওয়ালা নোড থাকে।
ডান সাবট্রিতে শুধু বড় বা সমান কি ওয়ালা নোড থাকে।
দুই সাবট্রিতেও অবশ্যই BST হতে হবে।
সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি BST রুট একমাত্র আর্গুমেন্ট হিসেবে নেবে। BST-তে ডুপ্লিকেট থাকতে পারে। ট্রি যে ডেটাগুলো স্টোর করেছে তার মোড বের করে রিটার্ন করতে হবে।
উদাহরণ
কোডটি নিচের মতো (হ্যাশ ম্যাপ দিয়ে ফ্রিকোয়েন্সি কাউন্ট):
class Node{ constructor(data) { this.data = data; this.left = null; this.right = null; }; }; class BinarySearchTree{ constructor(){ this.root = null; } insert(data){ var newNode = new Node(data); if(this.root === null){ this.root = newNode; }else{ this.insertNode(this.root, newNode); }; }; insertNode(node, newNode){ if(newNode.data < node.data){ if(node.left === null){ node.left = newNode; }else{ this.insertNode(node.left, newNode); }; } else { if(node.right === null){ node.right = newNode; }else{ this.insertNode(node.right,newNode); }; }; }; }; const BST = new BinarySearchTree(); BST.insert(1); BST.insert(3); BST.insert(3); BST.insert(2); BST.insert(3); BST.insert(2); const findMode = function(root) { let max = 1; const hash = {}; const result = []; const traverse = node => { if (hash[node.data]) { hash[node.data] += 1; max = Math.max(max, hash[node.data]); } else { hash[node.data] = 1; }; node.left && traverse(node.left); node.right && traverse(node.right); }; if(root){ traverse(root); }; for(const key in hash) { hash[key] === max && result.push(key); }; return +result[0]; }; console.log(findMode(BST.root)); আউটপুট
কনসোলে আউটপুট:
3