ฉันมีการมอบหมายที่ฉันต้องใช้ต้นไม้ค้นหาแบบทวิภาคและปรับเปลี่ยนเพื่อเรียงลำดับตัวเองเช่นรายการที่เข้าถึงได้มากที่สุด (มีลำดับความสำคัญสูงกว่า) อยู่ที่ด้านบนของต้นไม้รากเป็นโหนดที่เข้าถึงได้มากที่สุด .
ศาสตราจารย์ให้ BST และโหนดโครงสร้างเพื่อทำงานร่วมกับฉัน แต่การพยายามเอาสมองของฉันไปรอบ ๆ อัลกอริทึมเพื่ออัปเดตต้นไม้เมื่อสิ่งต่าง ๆ แทรกอยู่ทำให้ฉันสับสน
ฉันรู้ว่าเมื่อมีการแทรกเกิดขึ้นมันจะตรวจสอบว่าข้อมูลของโหนดปัจจุบันน้อยกว่าหรือมากกว่าโหนดปัจจุบันจากนั้นจะวนซ้ำในทิศทางที่ถูกต้องจนกว่าจะพบตัวชี้ null และแทรกตัวเองที่นั่น และหลังจากใส่แล้วจะเพิ่มระดับความสำคัญเป็น 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
}
ตอนนี้ฉันต้องคิดออกเมื่อโหนดเท่ากันวิธีการสั่งซื้อต้นไม้ใหม่เพื่อให้โหนดปัจจุบัน (ซึ่งเท่ากับโหนดที่มีอยู่แล้ว) ค้นหาโหนดที่มีอยู่เพิ่มลำดับความสำคัญของโหนดนั้นแล้วเลื่อนขึ้นถ้า รูทเป็นลำดับความสำคัญต่ำกว่า
ฉันคิดว่าฉันมีความคิดว่าตรรกะ AVL จะทำงานได้และเมื่อมีการเปลี่ยนแปลงเกิดขึ้นมันจะเป็นการหมุนครั้งเดียวหรือหมุนครั้งเดียว
ที่นี่ฉันสับสนไม่ทราบว่าจะเริ่มต้นด้วยการสร้างอัลกอริทึมในการแก้ปัญหาได้อย่างไร เนื่องจากอัลกอริทึม AVL ทำงานกับการติดตามความสมดุลของต้นไม้จากนั้นหมุนโหนดไปทางซ้ายหรือขวาตามลำดับต้นไม้นี้ไม่จำเป็นต้องกังวลเกี่ยวกับความสมดุลเพียงแค่ว่าโหนดที่มีลำดับความสำคัญสูงสุดไม่มีลูกที่มีลำดับความสำคัญสูงกว่า .