আমার একটি অ্যাসাইনমেন্ট রয়েছে যেখানে আমাকে একটি বাইনারি অনুসন্ধান গাছ ব্যবহার করতে হবে এবং এটি নিজেকে স্ব-আদেশে পরিবর্তন করতে হবে যাতে সর্বাধিক অ্যাক্সেস হওয়া আইটেমগুলি (উচ্চতর অগ্রাধিকার থাকে) গাছের শীর্ষে থাকে, মূলটি সর্বাধিক অ্যাক্সেসযুক্ত নোড হয় ।
প্রফেসর আমাকে কাজ করার জন্য বিএসটি এবং নোড স্ট্রাক্ট দিয়েছিলেন, তবে গাছটি আপডেট করার জন্য অ্যালগরিদমের চারপাশে আমার মাথা পেতে চেষ্টা করা হচ্ছে কারণ জিনিসগুলি sertedোকানো হচ্ছে বলে আমাকে বিভ্রান্ত করছে।
আমি জানি যে সন্নিবেশটি ঘটছে, এটি পরীক্ষা করে যে বর্তমান নোডের ডেটা বর্তমান নোডের চেয়ে কম বা বেশি, তবে এটি একটি নাল পয়েন্টার খুঁজে না পেয়ে এবং সেখানে নিজেকে inোকানো না হওয়া পর্যন্ত পুনরাবৃত্তভাবে সঠিক দিকে চলে যায়। এবং এটি isোকানোর পরে এটি অগ্রাধিকারটি 1 দ্বারা বৃদ্ধি করে।
template <class Type>
void BinarySearchTree<Type> :: insert( const Type & x, BinaryNode<Type> * & t )
{
if( t == NULL )
t = new BinaryNode<Type>( x, NULL, NULL );
else if( x < t->element )
insert( x, t->left );
else if( t->element < x )
insert( x, t->right );
else
t->priority++; // Duplicate; do nothing for right now
}
এখন আমাকে নোড সমান হলে কীভাবে গাছটিকে পুনরায় অর্ডার করবেন যাতে বর্তমান নোড (যিনি ইতিমধ্যে বিদ্যমান নোডের সমান) বিদ্যমান নোডটি সন্ধান করে, সেই নোডের অগ্রাধিকার বাড়ায়, তারপরে এটি স্থানান্তরিত করতে হবে রুট একটি নিম্ন অগ্রাধিকার।
আমার মনে হয় আমার এভিএল যুক্তিটি কাজ করবে এবং আমার কোন ধারণা স্থানান্তরিত হবে তখন এটি ডানদিকে বা একক আবর্তন বাম হতে পারে।
এখানে আমি যেখানে বিভ্রান্ত, সমস্যাটি সমাধানের জন্য অ্যালগরিদম তৈরির সাথে কোথায় শুরু করব তা সত্যিই জানেন না। যেহেতু এভিএল অ্যালগরিদম গাছের ভারসাম্য রক্ষার জন্য কাজ করে, তারপরে নোডগুলি বাম বা ডান ঘোরানো হয়, তাই এই গাছটি ভারসাম্যপূর্ণ হওয়ার বিষয়ে চিন্তা করার দরকার নেই, কেবল যে সর্বোচ্চ অগ্রাধিকারযুক্ত নোডগুলি উচ্চ অগ্রাধিকার সহ শিশুদের না রাখে ।