ভারসাম্যযুক্ত বাইনারি অনুসন্ধান গাছগুলি ও (লগ এন) লুকআপগুলি (বা অনুরূপ ক্রিয়াকলাপ) এর গ্যারান্টি দিতে প্রয়োজনীয় । একটি গতিশীল পরিবেশে যেখানে প্রচুর কীগুলি এলোমেলোভাবে sertedোকানো হয় এবং / অথবা মুছে ফেলা হয়, গাছগুলি লিঙ্কযুক্ত তালিকায় হ্রাস পেতে পারে যা দেখার জন্য ভয়ঙ্কর। সুতরাং বিভিন্ন ধরণের স্ব-ভারসাম্য বাইনারি গাছ রয়েছে যা এই প্রভাবটিকে প্রতিহত করে (যেমন এভিএল গাছ বা স্প্লে গাছ )। এই গাছগুলি বিভিন্ন ধরণের আবর্তের উপর ভিত্তি করে গাছকে ভারসাম্য বজায় রাখে।
ঘুর্ণন
এই চ্যালেঞ্জের মধ্যে আমরা কেবলমাত্র একক ডান-ঘূর্ণন দিকে লক্ষ্য করব, এই জাতীয় ঘূর্ণন (বাম-রোটেশনটি প্রতিসম হবে) এর মতো দেখতে:
5 3
/ \ / \
3 6 => 1 5
/ \ / \
1 4 4 6
যদি কোনও পাতা 1
, 4
বা 6
বাম বা ডান উপ-গাছ থাকে তবে একটি ঘূর্ণন এগুলি কেবল সেখানে রাখবে। যদি এটি বৃহত্তর গাছের একটি সাবট্রি হয় তবে আমরা নোডে কেবল "এটি কেটে ফেলতাম" এবং সেই নোডের 5
সাথে ঘোরানো গাছটি (এখন নোড 3
) "পুনরায় সংযুক্ত" করব ।
চ্যালেঞ্জ
উপরের বর্ণনা অনুসারে একটি বাইনারি অনুসন্ধান গাছ 1 এবং সেই নোডের উপরে গাছটিকে ডানদিকে ঘোরান একটি কী দেওয়া হয়েছে। উপরের উদাহরণে প্রদত্ত কীটি হবে 5
।
বিধি এবং I / O
- আপনার পছন্দের কী এবং পরীক্ষার কেসগুলির মধ্যে দ্বিপক্ষীয়তা না থাকলে আপনি যে কোনও ধরণের কী ব্যবহার করতে পারেন
- আপনি দ্বৈত গাছের জন্য কোনও উপস্থাপনা বেছে নিতে পারেন যতক্ষণ না কোনও অস্পষ্টতা নেই (উদাহরণস্বরূপ
[3,[]]
অস্পষ্ট হয় অন্যথায় নির্দিষ্ট না করা পর্যন্ত) এবং এটি আপনার পছন্দের ভাষার পক্ষে স্বাভাবিক - যেহেতু ইনপুটটি সর্বদা একটি বাইনারি অনুসন্ধান গাছ থাকবে সেখানে কোনও সদৃশ কী নেই
- আপনি ধরে নিতে পারেন গাছটিতে কীটি রয়েছে
- আপনি ধরে নিতে পারেন যে কীটিযুক্ত নোডের একটি বাম সন্তান রয়েছে has
- আপনি প্রদত্ত কী এর অধীনে একটি সঠিক সাবট্রি অনুমান করতে পারবেন না
- আপনি ধরে নিতে পারবেন না যে গাছটি ঘোরার আগে ভারসাম্যহীন
- আপনি ধরে নিতে পারবেন না যে গাছটি ঘোরার পরে ভারসাম্যপূর্ণ
- আপনি যে কোনও ডিফল্ট আই / ও পদ্ধতি ব্যবহার করতে পারেন
- আপনার জমাটি গাছটি ফিরিয়ে ফেলা বা সমাধান সমাধানের সম্পূর্ণ প্রোগ্রাম হতে পারে
পরীক্ষার মামলা
এই উদাহরণগুলি নীচে একটি গাছকে উপস্থাপন করে
- যদি এটি একটি পাতা:
[]
- যদি এটি
x
চাবিযুক্ত একটি গাছ এবং উভয় সাবট্রির পাতা হয়:[x]
- যদি এটি কী
x
এবং সাবট্রি সহ একটি গাছ থাকেleft
right
:[x,left,right]
প্রথম উদাহরণটি রোটেশন বিভাগে প্রদত্ত একটি । যদি কোনও কারণে আপনার এগুলির একটি গ্রাফিকাল উপস্থাপনা প্রয়োজন হয় তবে এখানে 2 আপনি যান।
5 [5,[3,[1],[4]],[6]] -> [3,[1],[5,[4],[6]]]
5 [5,[3,[1],[4]],[]] -> [3,[1],[5,[4],[]]]
5 [5,[3,[],[4]],[6]] -> [3,[],[5,[4],[6]]]
5 [5,[3,[1],[]],[]] -> [3,[1],[5]]
4 [8,[4,[2,[1],[3]],[6,[5],[7]]],[12,[10,[9],[11]],[14,[13],[15]]]] -> [8,[2,[1],[4,[3],[6,[5],[7]]]],[12,[10,[9],[11]],[14,[13],[15]]]]
8 [10,[8,[6,[4,[2,[],[3]],[5]],[7]],[9]],[11]] -> [10,[6,[4,[2,[],[3]],[5]],[8,[7],[9]]],[11]]
10 [10,[8,[6,[4,[2,[],[3]],[5]],[7]],[9]],[11]] -> [8,[6,[4,[2,[],[3]],[5]],[7]],[10,[9],[11]]]
9 [6,[3,[2],[5]],[9,[8],[12,[11],[15,[14],[]]]]] -> [6,[3,[2],[5]],[8,[],[9,[],[12,[11],[15,[14],[]]]]]]
7 [7,[5,[3,[1],[4]],[6]],[8]] -> [5,[3,[1],[4]],[7,[6],[8]]]
15 [17,[9,[5,[2,[0],[4]],[8]],[15,[13,[11,[10],[12]],[14]],[16]]],[40,[27,[21,[19,[18],[20]],[24,[22],[25]]],[28]],[44,[42,[41],[]],[51,[47],[59,[55],[61]]]]]] -> [17,[9,[5,[2,[0],[4]],[8]],[13,[11,[10],[12]],[15,[14],[16]]]],[40,[27,[21,[19,[18],[20]],[24,[22],[25]]],[28]],[44,[42,[41],[]],[51,[47],[59,[55],[61]]]]]]
21 [17,[9,[5,[2,[0],[4]],[8]],[15,[13,[11,[10],[12]],[14]],[16]]],[40,[27,[21,[19,[18],[20]],[24,[22],[25]]],[28]],[44,[42,[41],[]],[51,[47],[59,[55],[61]]]]]] -> [17,[9,[5,[2,[0],[4]],[8]],[15,[13,[11,[10],[12]],[14]],[16]]],[40,[27,[19,[18],[21,[20],[24,[22],[25]]]],[28]],[44,[42,[41],[]],[51,[47],[59,[55],[61]]]]]]
1: মানে যে কোনও নোডের জন্য বাম সাবট্রির সমস্ত কীগুলি কীটির চেয়ে ছোট হবে এবং ডান সাবট্রির সমস্ত কী এর চেয়ে বড় হবে
2: লিঙ্ক পচা রোধ করতে, আমি তাদের মন্তব্য হিসাবে এম্বেড করেছি
data B=B[B]Int
আরও কিছু বাইট সংরক্ষণ করতে পারে।