สมมติว่านิยามของต้นไม้สีแดงดำดังต่อไปนี้
- มันเป็นต้นไม้ค้นหาแบบไบนารี
- แต่ละโหนดมีสีทั้งสีแดงหรือสีดำ รากมีสีดำ
- สองโหนดที่เชื่อมต่อด้วยขอบไม่สามารถเป็นสีแดงได้ในเวลาเดียวกัน
- นี่ควรเป็นคำจำกัดความที่ดีของใบไม้ NIL เช่นเดียวกับบนวิกิ ใบไม้ NIL เป็นสีดำ
- เส้นทางจากรูตไปยังใบไม้ NIL ใด ๆ มีจำนวนโหนดดำจำนวนเท่ากัน
คำถาม
สมมติว่าคุณได้ใช้งานinsert
และdelete
การดำเนินการสำหรับต้นไม้สีแดงดำ ทีนี้ถ้าคุณได้รับต้นไม้สีแดงดำที่ถูกต้องจะมีลำดับinsert
และdelete
การดำเนินการที่สร้างไว้หรือไม่
แรงจูงใจ
คำถามนี้กระตุ้นโดยคำถามนี้และจากการสนทนาจากคำถามนี้
โดยส่วนตัวแล้วฉันเชื่อว่าถ้าคุณจินตนาการถึงต้นไม้สีแดงดำที่ถูกต้องซึ่งประกอบด้วยเพียงโหนดสีดำ (ซึ่งหมายความว่าคุณกำลังจินตนาการต้นไม้ที่สมดุลอย่างสมบูรณ์) มีลำดับinsert
และdelete
การดำเนินการที่สร้างมันขึ้นมา อย่างไรก็ตาม
- ฉันไม่ทราบวิธีที่จะพิสูจน์ได้อย่างถูกต้องว่า
- ฉันยังสนใจในกรณีทั่วไปมากขึ้น
insert
และdelete
สร้างต้นไม้สีแดงดำที่ถูกต้องซึ่งประกอบด้วยโหนดสีดำเท่านั้น มันใช้แทรก / ลบเพื่อสร้างต้นไม้แห่งความสูงชั่วโมง อันดับแรกเราสามารถสร้างต้นไม้สีแดงดำที่มีความสมดุลอย่างสมบูรณ์แบบโดยใช้ความกว้าง2 ชั่วโมง+ 1 - 1ครั้งจากนั้นใช้h ∗ 2 h - 1การแทรกและการลบในจำนวนเดียวกันจะวาดใหม่เป็นต้นไม้สีดำสนิท เคล็ดลับที่นี่คือการเลื่อนขึ้นกับเลเยอร์สีแดงที่ต่ำที่สุดขึ้นไปจนถึงราก
insert
และdelete
การดำเนินงาน
insert
และdelete
; อาจมีหลายวิธีในการดำเนินการเหล่านี้ b) เนื่องจากต้นไม้ RB เป็นต้นไม้ B ลำดับที่ 4 เราจึงสามารถมองหาแรงบันดาลใจได้ รายละเอียดอาจพิสูจน์ได้ยากเนื่องจากการทำแผนที่จาก RB ไปยัง B (และ / หรือด้านหลัง) นั้นไม่ซ้ำกัน