ก่อนอื่นฉันจะสมมติว่าองค์ประกอบทั้งหมดนั้นแตกต่างกัน ปริมาณของ sequentialisations [3,3,3,3,3]
ไม่มีจะไปบอกคุณรูปร่างของต้นไม้ที่มีองค์ประกอบ เป็นไปได้ที่จะสร้างต้นไม้ขึ้นใหม่ด้วยองค์ประกอบที่ซ้ำกันแน่นอน ฉันไม่รู้ว่ามีเงื่อนไขเพียงพอที่ดีอยู่
ดำเนินการต่อกับผลลัพธ์เชิงลบคุณไม่สามารถสร้างแผนภูมิต้นไม้ไบนารีได้อย่างสมบูรณ์จากลำดับก่อนหลังและลำดับโพสต์ตามลำดับเพียงอย่างเดียว [1,2]
pre [2,1]
-order post-order ต้อง1
อยู่ที่ root แต่2
สามารถเป็นได้ทั้งลูกซ้ายหรือลูกขวา หากคุณไม่สนใจความกำกวมนี้คุณสามารถสร้างต้นไม้ใหม่ด้วยอัลกอริทึมต่อไปนี้:
- ให้เป็นเส้นทางการสั่งซื้อล่วงหน้าและเป็นเส้นทางการส่งคำสั่งซื้อล่วงหน้า เราต้องมีและนี่คือรากของต้นไม้[x1,…,xn][yn,…,y1]x1=y1
- x2เป็นลูกที่อยู่ทางซ้ายสุดของรูทและเป็นลูกที่อยู่ขวาสุด หากโหนดรูทจะไม่พร้อมกัน ชดเชยมากกว่าและเพื่อสร้างทรีย่อยy2x2=y2[x2,…,xn][yn,…,y2]
- มิฉะนั้นให้และเป็นดัชนีดังกล่าวว่าและx_j คือการสำรวจเส้นทางล่วงหน้าของทรีย่อยทางซ้ายทรีย่อยที่ถูกต้องและคล้ายกันสำหรับทราฟฟอร์โพสต์ลำดับ ทรีย่อยซ้ายมีองค์ประกอบและทรีย่อยทางขวามีองค์ประกอบ ชดเชยหนึ่งครั้งสำหรับแต่ละทรีย่อย
โดยวิธีการนี้วิธีการทั่วไปกับต้นไม้ด้วยการแยกสาขาโดยพลการ ด้วยการแยกสาขาโดยพลการค้นหาขอบเขตของทรีย่อยซ้ายและตัดองค์ประกอบออกจากรายการทั้งสองจากนั้นทำซ้ำเพื่อตัดทรีย่อยทรีที่สองออกจากด้านซ้ายและอื่น ๆijx2=yiy2=xj[x2,…,xj−1][xj,…,xn]j−2=n−i+1i−2=n−j+1
j−2
ตามที่ระบุเวลาทำงานคือกับกรณีที่เลวร้ายที่สุด (ในกรณีที่มีลูกสองคนเราจะค้นหารายการแต่ละรายการ) คุณสามารถเปลี่ยนให้เป็นหากคุณประมวลผลรายการล่วงหน้าเพื่อสร้างโครงสร้างแผนที่ จำกัด จากค่าองค์ประกอบไปยังตำแหน่งในรายการอินพุต . นอกจากนี้ยังใช้อาร์เรย์หรือแผนที่ จำกัด เพื่อเปลี่ยนจากดัชนีเป็นค่า ติดกับดัชนีทั่วโลกดังนั้นการโทรซ้ำจะได้รับแผนที่ทั้งหมดและใช้ช่วงเป็นอาร์กิวเมนต์ที่จะรู้ว่าจะทำอย่างไรO(n2)Θ(n2)O(nlg(n))nlg(n)
ด้วยการแวะผ่านการสั่งซื้อล่วงหน้าและการสำรวจเส้นทางภายในคุณสามารถสร้างต้นไม้ขึ้นใหม่ดังนี้:[x1,…,xn][z1,…,zn]
- รากเป็นหัวหน้าของการสั่งซื้อล่วงหน้าข้ามผ่านx_1x1
- ให้เป็นดัชนีดังกล่าวที่x_1 จากนั้นเป็น traversal ตามลำดับของลูกซ้ายและเป็น traversal ตามลำดับของลูกขวา ไปตามจำนวนขององค์ประกอบเป็นการสำรวจเส้นทางล่วงหน้าของลูกซ้ายและของลูกที่ถูกต้อง เงินคืนเพื่อสร้างทรีย่อยทางซ้ายและขวาkzk=x1[z1,…,zk−1][zk+1,…,zn][x2,…,xk][xk+1,…,xn]
อีกครั้งอัลกอริทึมนี้คือตามที่ระบุไว้และสามารถดำเนินการในหากรายการถูกประมวลผลล่วงหน้าลงในแผนที่ จำกัด จากค่าไปยังตำแหน่งO(n2)O(nlg(n))
การโพสต์คำสั่งซื้อและการสั่งซื้อเป็นไปตามสัดส่วน