การใช้ ES6 ของโครงสร้างข้อมูลแผนผังการค้นหาแบบไบนารีพร้อมการสนับสนุน TypeScript
ไปที่แนวทางปฏิบัติเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีแปลเอกสารนี้เป็นภาษาอื่นๆ
yarn add binstree
npm install binstree
แผนผังการค้นหาแบบไบนารีเป็นโครงสร้างข้อมูลแบบต้นไม้ไบนารีแบบรูท ซึ่งโหนดประกอบด้วย key
เฉพาะและ value
ที่เกี่ยวข้อง และชี้ไปที่แผนผังย่อย left
และ right
สองรายการที่แตกต่างกัน ทรีเป็นไปตามคุณสมบัติการค้นหาแบบไบนารี ดังนั้นคีย์ในแต่ละโหนดจึงมากกว่าคีย์ใดๆ ที่จัดเก็บไว้ในแผนผังย่อยด้านซ้าย และน้อยกว่าคีย์ใดๆ ที่จัดเก็บไว้ในแผนผังย่อยด้านขวา จากผลลัพธ์ที่ใกล้จะเกิดขึ้นของหลักการนี้ การดำเนินการกับแผนผังจะได้รับประโยชน์อย่างมาก เนื่องจากโดยเฉลี่ยแล้วการเปรียบเทียบคีย์แต่ละครั้งจะทำให้การดำเนินการสามารถข้ามได้ประมาณครึ่งหนึ่งของแผนผัง ดังนั้นการแทรก การลบ หรือการค้นหาแต่ละครั้งจะใช้เวลาเป็นสัดส่วนกับลอการิทึมของจำนวนโหนด เก็บไว้ในต้นไม้
Binstree เปิดเผย API แบบลูกโซ่ ซึ่งสามารถใช้งานได้ผ่านไวยากรณ์ที่เรียบง่ายและน้อยที่สุด ช่วยให้คุณสามารถรวมวิธีการต่างๆ ได้อย่างมีประสิทธิภาพ
ตัวอย่างการใช้งานยังสามารถพบได้ที่ไดเร็กทอรี test
'use strict' ;
const { Tree , Node } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
//=> Tree { root: null }
tree . insert ( 10 , 'A' ) ;
// => Tree { root: Node { left: null, right: null, key: 10, value: 'A' } }
tree . root ;
//=> Node { left: null, right: null, key: 10, value: 'A' }
const node = new Node ( 10 , 'A' ) ;
tree . root . key === node . key ;
//=> true
tree . root . value === node . value ;
//=> true
tree . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) . root ;
//=> Node { left: [Node], right: [Node], key: 10, value: 'A' }
tree . root . left ;
//=> Node { left: null, right: null, key: 5, value: 'B' }
tree . root . right ;
//=> Node { left: null, right: null, key: 15, value: 'C' }
tree . insert ( 2 , 'D' ) . insert ( 7 , 'E' ) . insert ( 12 , 'F' ) . insert ( 20 , 'G' ) ;
tree . search ( 5 ) ;
//=> Node { key: 5, value: 'B',
// left: Node { left: null, right: null, key: 2, value: 'D' },
// right: Node { left: null, right: null, key: 7, value: 'E' } }
tree . search ( 15 ) ;
//=> Node { key: 15, value: 'C',
// left: Node { left: null, right: null, key: 12, value: 'F' },
// right: Node { left: null, right: null, key: 20, value: 'G' } }
tree . includes ( 12 ) ;
//=> true
tree . includes ( 100 ) ;
//=> false
tree . height ( ) ;
//=> 2
tree . isBalanced ( ) ;
//=> true
tree . remove ( 10 ) . root ;
//=> Node { key: 12, value: 'F',
// left: Node { left: [Node], right: [Node], key: 5, value: 'B' },
// right: Node { left: null, right: [Node], key: 15, value: 'C' } }
tree . isBalanced ( ) ;
//=> false
insert(key, value)
Tree
กลายพันธุ์ต้นไม้โดยการแทรกโหนดใหม่ในตำแหน่งที่เหมาะสม
key
Number
อาจเป็นตัวเลขใดก็ได้ที่จะสอดคล้องกับ key
ของโหนดที่สร้างขึ้น แต่ละโหนดมี key
เฉพาะของตัวเอง
value
Any
อาจเป็นค่าใดๆ ที่จะจัดเก็บไว้ในโหนดที่สร้างขึ้น
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) ;
// => Tree { root: Node { key: 10, value: 'A', left: null, right: null } }
root
Node | null
ส่งกลับโหนดรากของต้นไม้ หากต้นไม้ว่างเปล่าจะส่งกลับ null
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) ;
// => Tree { root: Node { key: 10, value: 'A', left: null, right: null } }
tree . root ;
// => Node { key: 10, value: 'A', left: null, right: null }
isEmpty()
Boolean
กำหนดว่าต้นไม้ว่างเปล่า โดยคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) ;
tree . isEmpty ( ) ;
// => false
remove(key)
Tree
กลายพันธุ์ต้นไม้โดยการลบโหนดที่สอดคล้องกับอาร์กิวเมนต์ key
key
Number
อาจเป็นตัวเลขใดๆ ที่สอดคล้องกับ key
ของโหนดที่มีอยู่
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) ;
tree . remove ( 10 ) ;
//=> Tree { root: null }
includes(key)
Boolean
กำหนดว่าแผนผังมีโหนดที่มี key
บางตัว โดยส่งคืน true
หรือ false
ตามความเหมาะสม
key
Number
key
โหนดเพื่อค้นหา
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) ;
tree . includes ( 10 ) ;
// => true
tree . includes ( 25 ) ;
// => false
tree . includes ( 5 ) ;
// => true
search(key)
Node | null
กำหนดว่าแผนผังรวมโหนดที่มี key
บางตัว โดยส่งคืนโหนดเป้าหมายหรือ null
ตามความเหมาะสม
key
Number
key
โหนดเพื่อค้นหา
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) ;
tree . search ( 10 ) ;
// => Node { key: 10, value: 'A', left: [Node], right: null }
tree . search ( 25 ) ;
// => null
tree . search ( 5 ) ;
// => Node { key: 5, value: 'B', left: null, right: null }
min()
Node | null
ส่งคืนโหนดซ้ายสุดในแผนผัง ดังนั้นโหนดที่สอดคล้องกับ key
ขั้นต่ำ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 0 , 'C' ) ;
tree . min ( ) ;
// => Node { key: 0, value: 'C', left: null, right: null }
max()
Node | null
ส่งคืนโหนดขวาสุดในแผนผัง ดังนั้นโหนดที่สอดคล้องกับ key
สูงสุด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 15 , 'B' ) . insert ( 25 , 'C' ) ;
tree . max ( ) ;
// => Node { key: 25, value: 'C', left: null, right: null }
size()
Number
ส่งกลับจำนวนโหนดทั้งหมดที่อยู่ในแผนผัง
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 15 , 'B' ) . insert ( 25 , 'C' ) ;
tree . size ( ) ;
// => 3
height()
Number
ส่งกลับระยะห่างสูงสุดของโหนดใบใดๆ จากราก หากต้นไม้ว่างเปล่า -1
จะถูกส่งกลับ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) ;
tree . height ( ) ;
// => 0
tree . insert ( 15 , 'B' ) . insert ( 25 , 'C' ) . insert ( 35 , 'D' ) ;
tree . height ( ) ;
//=> 3
inOrder(fn)
Tree
ใช้การแวะผ่านตามลำดับ (การแวะผ่านเชิงลึกก่อน - LNR) กับแผนผังและดำเนินการฟังก์ชัน fn
ที่มีให้บนแต่ละโหนดที่สำรวจโดยไม่ต้องเปลี่ยนโครงสร้างต้นไม้เอง
fn
Function
ฟังก์ชั่นที่จะดำเนินการในแต่ละโหนด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . inOrder ( node => console . log ( node . key ) ) ;
// => 5
// 10
// 15
preOrder(fn)
Tree
ใช้การแวะผ่านตามคำสั่งซื้อล่วงหน้า (การแวะผ่านเชิงลึกก่อน - NLR) กับแผนผังและดำเนินการฟังก์ชัน fn
ที่ให้มาบนแต่ละโหนดที่สำรวจโดยไม่ต้องเปลี่ยนโครงสร้างต้นไม้เอง
fn
Function
ฟังก์ชั่นที่จะดำเนินการในแต่ละโหนด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . preOrder ( node => console . log ( node . key ) ) ;
// => 10
// 5
// 15
postOrder(fn)
Tree
ใช้การแวะผ่านลำดับหลัง (การแวะผ่านเชิงลึกก่อน - LRN) กับแผนผังและดำเนินการฟังก์ชัน fn
ที่ให้มาบนแต่ละโหนดที่สำรวจโดยไม่ต้องเปลี่ยนโครงสร้างต้นไม้เอง
fn
Function
ฟังก์ชั่นที่จะดำเนินการในแต่ละโหนด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . postOrder ( node => console . log ( node . key ) ) ;
// => 5
// 15
// 10
outOrder(fn)
Tree
ใช้การแวะผ่านนอกลำดับ (การแวะผ่านเชิงลึกก่อน - RNL) กับแผนผังและดำเนินการฟังก์ชัน fn
ที่จัดไว้ให้บนแต่ละโหนดที่สำรวจโดยไม่ต้องเปลี่ยนโครงสร้างต้นไม้เอง
fn
Function
ฟังก์ชั่นที่จะดำเนินการในแต่ละโหนด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . outOrder ( node => console . log ( node . key ) ) ;
// => 15
// 10
// 5
levelOrder(fn)
Tree
ใช้การข้ามลำดับระดับ (การข้ามผ่านตามความกว้างก่อน) กับแผนผังและดำเนินการฟังก์ชัน fn
ที่จัดให้บนแต่ละโหนดที่ข้ามผ่านโดยไม่ต้องเปลี่ยนโครงสร้างต้นไม้เอง
fn
Function
ฟังก์ชั่นที่จะดำเนินการในแต่ละโหนด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . levelOrder ( node => console . log ( node . key ) ) ;
// => 10
// 5
// 15
clear()
Tree
กลายพันธุ์ต้นไม้โดยการลบโหนดที่อยู่ทั้งหมดออก และส่งคืนให้ว่างเปล่า
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
//=> Tree { root: Node { left: [Node], right: [Node], key: 3, value: 'A' } }
tree . size ( ) ;
//=> 3
tree . clear ( ) ;
//=> Tree { root: null } }
tree . size ( ) ;
//=> 0
toArray()
Array<Node>
ใช้การข้ามผ่านตามลำดับกับแผนผังและจัดเก็บแต่ละโหนดที่ข้ามผ่านในอาร์เรย์ อาร์เรย์จะถูกส่งกลับเมื่อสิ้นสุดการสำรวจ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) . insert ( 3 , 'D' ) . insert ( 20 , 'F' ) ;
tree . toArray ( ) ;
//=> [
// Node { left: null, right: null, key: 3, value: 'D' },
// Node { left: [Node], right: null, key: 5, value: 'B' },
// Node { left: [Node], right: [Node], key: 10, value: 'A' },
// Node { left: null, right: [Node], key: 15, value: 'C' },
// Node { left: null, right: null, key: 20, value: 'F' }
// ]
toPairs()
Array<[Number, Any]>
ใช้การข้ามผ่านตามลำดับกับทรีและสำหรับแต่ละโหนดที่เคลื่อนที่จะเก็บอยู่ใน n
-tuple โดยที่ n
ขนาดของทรีคือคู่อันดับ/2-tuple โดยที่องค์ประกอบแรกคือ number
ที่สอดคล้องกับ key
ของ โหนดที่เคลื่อนที่ และค่าสุดท้ายคือค่าประเภท any
ซึ่งสอดคล้องกับ value
ที่เก็บไว้ในโหนดที่เคลื่อนที่ n
-tuple จะถูกส่งกลับเมื่อสิ้นสุดการสำรวจ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) . insert ( 3 , 'D' ) . insert ( 20 , 'F' ) ;
tree . toPairs ( ) ;
//=> [ [3, 'D'], [5, 'B'], [10, 'A'], [15, 'C'], [20, 'F'] ]
leafNodes()
Array<Node>
ใช้การข้ามผ่านตามลำดับกับทรีและจัดเก็บโหนดลีฟที่เคลื่อนที่แต่ละโหนด (โหนดที่ไม่มีลูก) ในอาร์เรย์ อาร์เรย์จะถูกส่งกลับเมื่อสิ้นสุดการสำรวจ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . leafNodes ( ) ;
//=> [
// Node { left: null, right: null, key: 5, value: 'B' },
// Node { left: null, right: null, key: 15, value: 'C' }
// ]
fullNodes()
Array<Node>
ใช้การข้ามผ่านตามลำดับกับแผนผังและจัดเก็บแต่ละโหนดที่เคลื่อนที่ผ่าน (โหนดที่มีลูกที่ไม่ใช่ค่าว่างสองตัว) ในอาร์เรย์ อาร์เรย์จะถูกส่งกลับเมื่อสิ้นสุดการสำรวจ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . fullNodes ( ) ;
//=> [
// Node { left: [Node], right: [Node], key: 10, value: 'A' }
// ]
partialNodes()
Array<Node>
ใช้การข้ามผ่านตามลำดับกับแผนผังและจัดเก็บแต่ละโหนดบางส่วน (โหนดที่มีลูกที่ไม่ใช่ค่าว่างหนึ่งรายการ) ในอาร์เรย์ อาร์เรย์จะถูกส่งกลับเมื่อสิ้นสุดการสำรวจ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) . insert ( 20 , 'D' ) . insert ( 3 , 'E' ) ;
tree . partialNodes ( ) ;
//=> [
// Node { left: [Node], right: null, key: 5, value: 'B' },
// Node { left: null, right: [Node], key: 15, value: 'C' }
// ]
isBalanced()
Boolean
คืนค่า true
หากต้นไม้มีความสูงสมดุล ซึ่งหมายความว่าต้นไม้ย่อยด้านซ้ายมีความสมดุล ต้นไม้ย่อยด้านขวามีความสมดุล และความแตกต่างระหว่างความสูงของต้นไม้ย่อยด้านซ้ายและแผนภูมิย่อยด้านขวาไม่เกิน 1 ใน กรณีอื่น ๆ วิธีการจะส่งกลับ false
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . isBalanced ( ) ;
//=> true
tree . insert ( 20 , 'D' ) . insert ( 30 , 'E' ) ;
tree . isBalanced ( ) ;
//=> false
isComplete()
Boolean
เมธอดนี้จะคืนค่า true
หากทรีเป็นแผนผังการค้นหาแบบไบนารีที่สมบูรณ์ ซึ่งหมายความว่าทุกระดับยกเว้นระดับสุดท้ายจะถูกเติมจนเต็ม และโหนดทั้งหมดจะอยู่ซ้ายสุดเท่าที่จะเป็นไปได้ ในกรณีอื่น ๆ วิธีการจะส่งกลับค่าเท็จ
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . isComplete ( ) ;
//=> true
tree . insert ( 3 , 'D' ) ;
tree . isComplete ( ) ;
//=> true
tree . insert ( 20 , 'E' ) ;
tree . isComplete ( ) ;
//=> false
isFull()
Boolean
วิธีการคืนค่า true
หากโหนดทั้งหมดที่อยู่ในแผนผังเป็นโหนดใบหรือโหนดเต็ม ในกรณีอื่นใด (ระดับโหนดเท่ากับ 1) วิธีการจะส่งกลับ false
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . isFull ( ) ;
//=> true
tree . insert ( 8 , 'D' ) ;
tree . isFull ( ) ;
//=> false
isPerfect()
Boolean
วิธีการคืนค่า true
หากโหนดภายในทั้งหมดที่อยู่ในแผนผังเป็นโหนดเต็ม (ระดับโหนดเท่ากับ 2) และโหนดใบทั้งหมดอยู่ที่ระดับความสูงเท่ากัน ในกรณีอื่นใด (ระดับโหนดเท่ากับ 1 หรือลีฟและโหนดเต็มพบในระดับความสูงเดียวกัน) วิธีการจะส่งกลับค่า false
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) ;
tree . isPerfect ( ) ;
//=> true
tree . insert ( 3 , 'D' ) . insert ( 7 , 'E' ) . insert ( 12 , 'F' ) . insert ( 20 , 'G' ) ;
tree . isPerfect ( ) ;
//=> true
tree . insert ( 1 , 'H' ) ;
tree . isPerfect ( ) ;
//=> false
นอกจากนี้ ยังมีคลาส Node
ที่เปิดเผยพร้อมกับคลาส Tree
อีกด้วย ซึ่งมีประโยชน์หลักสำหรับการทดสอบ เนื่องจากสามารถใช้เพื่อเปรียบเทียบโหนดแผนผังได้ คลาสนี้มีเมธอดคอนสตรัคเตอร์แบบไบนารี โดยมี key
และพารามิเตอร์ value
ซึ่งสอดคล้องกับคีย์และค่าที่จัดเก็บไว้ในอินสแตนซ์ที่สร้างขึ้นตามลำดับ
key
Number
key
ที่สอดคล้องกับอินสแตนซ์ของโหนด
const { Node } = require ( 'binstree' ) ;
const node = new Node ( 10 , 'A' ) ;
// => { key:10, value: 'A', left: null, right: null }
node . key ;
//=> 10
value
Any
ค่าที่โหนดมีอยู่
const { Node } = require ( 'binstree' ) ;
const node = new Node ( 10 , 'A' ) ;
// => { key: 10, value: 'A', left: null, right: null }
node . value ;
//=> 'A'
node . value = 'B'
// => { key: 10, value: 'B', left: null, right: null }
left
Node | null
ทรีย่อยด้านซ้ายที่โหนดชี้ไป
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root ;
// => { key: 10, value: 'A', left: null, right: null }
tree . root . left ;
//=> null
tree . insert ( 5 , 'B' ) . root ;
// => { key: 10, value: 'A', left: { key: 5, value: 'B', left: null, right: null } , right: null }
tree . root . left ;
//=> { key: 5, value: 'B', left: null, right: null }
right
Node | null
ทรีย่อยด้านขวาที่โหนดชี้ไป
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root ;
// => { key: 10, value: 'A', left: null, right: null }
tree . root . right ;
//=> null
tree . insert ( 15 , 'B' ) . root ;
// => { key: 10, value: 'A', left: null , right: { key: 15, value: 'B', left: null, right: null } }
tree . root . right ;
//=> { key: 15, value: 'B', left: null, right: null }
children
Array<Node>
ส่งคืนอาร์เรย์ที่ติดต่อกับลูกของอินสแตนซ์ โดยที่ลูกด้านซ้าย (ถ้ามี) เป็นองค์ประกอบแรกของอาร์เรย์ และลูกด้านขวา (หากมี) คือองค์ประกอบสุดท้ายของอาร์เรย์
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . children ;
//=> []
tree . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) . root . children ;
// => [
// { key: 5, value: 'B', left: null , right: null },
// { key: 15, value: 'C', left: null, right: null }
// ]
degree
Number
ส่งกลับจำนวนแผนผังย่อยที่โหนดชี้ไป
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . degree ;
//=> 0
tree . insert ( 5 , 'B' ) . root . degree ;
//=> 1
tree . insert ( 15 , 'C' ) . root . degree ;
//=> 2
height()
Number
ส่งกลับระยะทางสูงสุดของโหนดปลายสุดจากอินสแตนซ์ของโหนด
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . insert ( 15 , 'B' ) . insert ( 25 , 'C' ) . insert ( 35 , 'D' ) ;
tree . root . height ( ) ;
//=> 3
tree . root . right . height ( ) ;
//=> 2
isFull()
Boolean
กำหนดว่าโหนดเป็นโหนดเต็ม (มีสองลูกที่ไม่ใช่ค่าว่าง) โดยส่งคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . isFull ( ) ;
//=> false
tree . insert ( 5 , 'B' ) . insert ( 15 , 'C' ) . root . isFull ( ) ;
//=> true
isInternal()
Boolean
กำหนดว่าโหนดเป็นโหนดภายใน (มีลูกที่ไม่ใช่ค่าว่างอย่างน้อยหนึ่งรายการ) โดยส่งคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . isInternal ( ) ;
//=> false
tree . insert ( 5 , 'B' ) . root . isInternal ( ) ;
//=> true
isLeaf()
Boolean
กำหนดว่าโหนดเป็นโหนดปลายสุด (ไม่มีลูก) โดยส่งคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . isLeaf ( ) ;
//=> true
tree . insert ( 5 , 'B' ) . root . isLeaf ( ) ;
//=> false
isLeftPartial()
Boolean
กำหนดว่าโหนดเป็นโหนดบางส่วนด้านซ้าย (มีโหนดย่อยที่ไม่เป็นค่าว่างเพียงโหนดเดียว) โดยส่งคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . isLeftPartial ( ) ;
//=> false
tree . insert ( 5 , 'B' ) . root . isLeftPartial ( ) ;
//=> true
isPartial()
Boolean
กำหนดว่าโหนดเป็นโหนดบางส่วน (มีลูกเดียวที่ไม่ใช่ค่าว่าง) โดยส่งคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . isPartial ( ) ;
//=> false
tree . insert ( 15 , 'B' ) . root . isPartial ( ) ;
//=> true
isRightPartial()
Boolean
กำหนดว่าโหนดเป็นโหนดบางส่วนที่ถูกต้อง (มีโหนดย่อยที่ไม่ใช่ค่าว่างเพียงโหนดเดียว) โดยส่งคืน true
หรือ false
ตามความเหมาะสม
const { Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
tree . insert ( 10 , 'A' ) . root . isRightPartial ( ) ;
//=> false
tree . insert ( 15 , 'B' ) . root . isRightPartial ( ) ;
//=> true
toPair()
[Number, Any]
ส่งกลับค่าคู่อันดับ/2-tuple โดยที่องค์ประกอบแรกเป็นตัวเลขที่สอดคล้องกับ key
ของโหนด และองค์ประกอบสุดท้ายคือค่า ซึ่งสามารถเป็นประเภทใดก็ได้ ซึ่งสอดคล้องกับ value
ที่จัดเก็บไว้ในโหนด
const { Node , Tree } = require ( 'binstree' ) ;
const tree = new Tree ( ) ;
const node = new Node ( 5 , 'B' ) ;
node . toPair ( ) ;
//=> [5, 'B']
tree . insert ( 10 , 'A' ) . root . toPair ( ) ;
//=> [10, 'A']
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการมีส่วนร่วมในโครงการ โปรดอ่านหลักเกณฑ์การบริจาค
cd binstree
npm install
หรือ yarn install
npm test
หรือ yarn test
เอ็มไอที