สร้าง BST ที่สมดุลจาก Listed Integers
รับรายการจำนวนเต็มเรียงลำดับสร้างแผนภูมิการค้นหาแบบไบนารีที่สมดุลซึ่งแสดงเป็นอาร์เรย์โดยไม่ต้องใช้การสอบถามซ้ำ ตัวอย่างเช่น: func( [1,2,3,5,8,13,21] ) => [5,2,13,1,3,8,21] ก่อนที่เราจะเริ่มต้นคำแนะนำ: เราสามารถทำให้ปัญหานี้ง่ายขึ้นเป็นตันเพื่อที่เราจะได้ไม่ต้องคิดเกี่ยวกับจำนวนเต็มอินพุท (หรือวัตถุใด ๆ ที่เทียบเท่าสำหรับเรื่องนั้น!) หากเรารู้ว่ารายการอินพุตถูกเรียงลำดับแล้วเนื้อหาจะไม่เกี่ยวข้อง เราสามารถคิดถึงมันในแง่ของดัชนีไปยังอาร์เรย์เดิม การเป็นตัวแทนภายในของอาร์เรย์อินพุตจะกลายเป็น: func( [0,1,2,3,4,5,6] ) => [3,1,5,0,2,4,6] นี่หมายถึงแทนที่จะเขียนสิ่งที่ต้องจัดการกับวัตถุที่เทียบเคียงได้เราเพียงแค่ต้องเขียนฟังก์ชันที่แมปจากช่วง [0, n) ไปยังอาร์เรย์ผลลัพธ์ เมื่อเรามีคำสั่งซื้อใหม่เราสามารถใช้การจับคู่กลับกับค่าในอินพุตเพื่อสร้างอาร์เรย์ส่งคืน โซลูชั่นที่ถูกต้องจะต้อง: ยอมรับอาร์เรย์ที่มีองค์ประกอบเป็นศูนย์และส่งกลับอาร์เรย์ที่ว่างเปล่า ยอมรับอาร์เรย์จำนวนเต็มที่มีความยาวnและส่งคืนอาร์เรย์จำนวนเต็ม ของความยาวระหว่างnและกำลังสูงสุดถัดไปคือ 2 ลบ 1 (เช่นสำหรับขนาดอินพุต 13 จะคืนค่าได้ทุกที่ระหว่าง 13 ถึง 15) Array ซึ่งแสดงถึง BST โดยที่โหนดรูทอยู่ที่ตำแหน่ง 0 และความสูงเท่ากับlog (n)โดยที่ 0 แทนโหนดที่หายไป (หรือnullค่าที่เหมือนกันถ้าภาษาของคุณอนุญาต) โหนดว่างเปล่าหากมีจะต้องมีอยู่ที่ส่วนท้ายของต้นไม้ (เช่น[2,1,0]) …