โครงสร้างข้อมูลต้นไม้
ต้นไม้คือกลุ่มของโหนดที่เชื่อมต่อกันด้วยขอบบางส่วน ตามธรรมเนียมแล้ว แต่ละโหนดของทรีจะมีข้อมูลและการอ้างอิงถึงลูกของมัน
แผนผังการค้นหาไบนารี
Binary Search tree เป็นไบนารีทรีที่โหนดที่มีค่าน้อยกว่าจะถูกเก็บไว้ทางด้านซ้ายในขณะที่โหนดที่มีค่าสูงกว่าจะถูกเก็บไว้ที่ด้านขวา
ตัวอย่างเช่น การแสดงภาพของ BST ที่ถูกต้องคือ −
25 / \ 20 36 / \ / \ 10 22 30 40
ตอนนี้เรามาติดตั้ง Binary Search Tree ในภาษา JavaScript กัน
ขั้นตอนที่ 1:คลาสโหนด
คลาสนี้จะแสดงโหนดเดียวที่จุดต่างๆ ใน BST BST เป็นเพียงชุดของโหนดที่จัดเก็บข้อมูลและการอ้างอิงย่อยที่วางตามกฎที่อธิบายไว้ข้างต้น
class Node{ constructor(data) { this.data = data; this.left = null; this.right = null; }; };
ในการสร้างอินสแตนซ์โหนดใหม่ เราสามารถเรียกคลาสนี้ด้วยข้อมูลบางส่วนได้ -
const newNode = new Node(23);
สิ่งนี้จะสร้างอินสแตนซ์ Node ใหม่พร้อมชุดข้อมูลเป็น 23 และการอ้างอิงซ้ายและขวาทั้งคู่เป็นโมฆะ
ขั้นตอนที่ 2:การค้นหาแบบไบนารีทรีคลาส:
class BinarySearchTree{ constructor(){ this.root = null; }; };
สิ่งนี้จะสร้างคลาส Binary Search Tree ซึ่งเราสามารถเรียกด้วยคำหลักใหม่เพื่อสร้างอินสแตนซ์ atree
ตอนนี้เมื่อเราทำสิ่งพื้นฐานเสร็จแล้ว เรามาทำการแทรกโหนดใหม่ในตำแหน่งที่ถูกต้อง (ตามกฎของ BST ที่อธิบายไว้ในคำจำกัดความ)
ขั้นตอนที่ 3:การแทรกโหนดใน BST
class BinarySearchTree{ constructor(){ this.root = null; } insert(data){ var newNode = new Node(data); if(this.root === null){ this.root = newNode; }else{ this.insertNode(this.root, newNode); }; }; insertNode(node, newNode){ if(newNode.data < node.data){ if(node.left === null){ node.left = newNode; }else{ this.insertNode(node.left, newNode); }; } else { if(node.right === null){ node.right = newNode; }else{ this.insertNode(node.right,newNode); }; }; }; };
ตัวอย่าง
รหัสต้นไม้การค้นหาไบนารีแบบเต็ม:
class Node{ constructor(data) { this.data = data; this.left = null; this.right = null; }; }; class BinarySearchTree{ constructor(){ this.root = null; } insert(data){ var newNode = new Node(data); if(this.root === null){ this.root = newNode; }else{ this.insertNode(this.root, newNode); }; }; insertNode(node, newNode){ if(newNode.data < node.data){ if(node.left === null){ node.left = newNode; }else{ this.insertNode(node.left, newNode); }; } else { if(node.right === null){ node.right = newNode; }else{ this.insertNode(node.right,newNode); }; }; }; }; const BST = new BinarySearchTree(); BST.insert(1); BST.insert(3); BST.insert(2);