Data Structure & Algorithm(EP.11) — Binary Search Tree (BST)

KongRuksiam Studio
3 min readFeb 28, 2024

--

  • โหนดลูกที่อยู่ด้านซ้ายของโหนดแม่จะเรียกว่า ทรีย่อยซ้าย (TL) เป็นกลุ่มข้อมูลที่มีค่าน้อยกว่าโหนดแม่
  • โหนดลูกที่อยู่ด้านขวาของโหนดแม่จะเรียกว่า ทรีย่อยขวา (TR) เป็นกลุ่มข้อมูลที่มีค่ามากกว่าโหนดแม่

สร้าง Binary Search Tree (BST)

class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}

class BinarySearchTree {
constructor() {
this.root = null;
}
}
let myBST = new BinarySearchTree();
console.log(myBST);

เพิ่มโหนดใน Binary Search Tree (Insert)

class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}

class BinarySearchTree {
constructor() {
this.root = null;
}
insert(value) {
const newNode = new Node(value);
if (this.root === null) {
this.root = newNode;
return this;
}
let temp = this.root;
while (true) {
if (newNode.value === temp.value) return undefined;
if (newNode.value < temp.value) {
if (temp.left === null) {
temp.left = newNode;
return this;
}
temp = temp.left;
} else {
if (temp.right === null) {
temp.right = newNode;
return this;
}
temp = temp.right;
}
}
}
}
let myBST = new BinarySearchTree();
myBST.insert(47);
myBST.insert(21);
myBST.insert(76);
console.log(myBST);

/*
แผนภาพไบนารีทรี
47
/ \
21 76
*/

ตรวจสอบข้อมูลใน Binary Search Tree (Contains)

class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}

class BinarySearchTree {
constructor() {
this.root = null;
}
insert(value) {
const newNode = new Node(value);
if (this.root === null) {
this.root = newNode;
return this;
}
let temp = this.root;
while (true) {
if (newNode.value === temp.value) return undefined;
if (newNode.value < temp.value) {
if (temp.left === null) {
temp.left = newNode;
return this;
}
temp = temp.left;
} else {
if (temp.right === null) {
temp.right = newNode;
return this;
}
temp = temp.right;
}
}
}
contains(value) {
if (this.root === null) return false;
let temp = this.root;
while (temp) {
if (value < temp.value) {
temp = temp.left;
} else if (value > temp.value) {
temp = temp.right;
} else {
return true;
}
}
return false;
}
}
let myBST = new BinarySearchTree();
myBST.insert(47);
myBST.insert(21);
myBST.insert(76);
myBST.insert(18);
myBST.insert(27);
myBST.insert(52);
myBST.insert(82);

console.log(myBST.contains(15));
console.log(myBST.contains(76));

หาค่าต่ำสุดใน Binary Search Tree (Minimum Value)

class Node {
constructor(value) {
this.value = value;
this.left = null;
this.right = null;
}
}

class BinarySearchTree {
constructor() {
this.root = null;
}
insert(value) {
const newNode = new Node(value);
if (this.root === null) {
this.root = newNode;
return this;
}
let temp = this.root;
while (true) {
if (newNode.value === temp.value) return undefined;
if (newNode.value < temp.value) {
if (temp.left === null) {
temp.left = newNode;
return this;
}
temp = temp.left;
} else {
if (temp.right === null) {
temp.right = newNode;
return this;
}
temp = temp.right;
}
}
}
contains(value) {
if (this.root === null) return false;
let temp = this.root;
while (temp) {
if (value < temp.value) {
temp = temp.left;
} else if (value > temp.value) {
temp = temp.right;
} else {
return true;
}
}
return false;
}
minimumNode(currentNode) {
while (currentNode.left !== null) {
currentNode = currentNode.left;
}
return currentNode;
}
}
let myBST = new BinarySearchTree();
myBST.insert(47);
myBST.insert(21);
myBST.insert(76);
myBST.insert(18);
myBST.insert(27);
myBST.insert(52);
myBST.insert(82);
console.log(myBST.minimumNode(myBST.root))
console.log(myBST.minimumNode(myBST.root).value)

เนื้อหาที่เกี่ยวข้อง

ช่องทางการสนับสนุน
🎓 คอร์สพัฒนาเว็บด้วย JavaScript 40 Workshop

🌎 ติดตามข่าวสารเพิ่มเติมได้ที่
Facebook | YouTube | TikTok

--

--

KongRuksiam Studio
KongRuksiam Studio

Written by KongRuksiam Studio

เรียนรู้การเขียนโปรแกรมนอกห้องเรียน

No responses yet