ต้นไม้ AVL ตรวจสอบความสูงของต้นไม้ย่อยด้านซ้ายและด้านขวา และรับรองว่าความแตกต่างไม่เกิน 1 ความแตกต่างนี้เรียกว่า ปัจจัยความสมดุล>
ตัวอย่างเช่น ในต้นไม้ต่อไปนี้ ต้นไม้ต้นแรกสมดุลและต้นไม้สองต้นถัดไปไม่สมดุล -
ในต้นไม้ที่สอง ต้นไม้ย่อยด้านซ้ายของ C มีความสูง 2 และต้นไม้ย่อยด้านขวามีความสูง 0 ดังนั้นความแตกต่างคือ 2 ในต้นไม้ที่สาม ต้นไม้ย่อยด้านขวาของ A มีความสูง 2 และด้านซ้ายหายไป จึงเป็น 0 และผลต่างเป็น 2 อีกครั้ง ต้นไม้ AVL อนุญาตให้ส่วนต่าง (ปัจจัยสมดุล) เป็น 1 เท่านั้น
BalanceFactor = height(left-sutree) − height(right-sutree)
หากความแตกต่างในความสูงของทรีย่อยซ้ายและขวามากกว่า 1 ต้นไม้จะถูกปรับสมดุลโดยใช้เทคนิคการหมุนบางอย่าง
ให้เรากำหนดวิธีการนี้และเริ่มต้นคลาสด้วย -
ตัวอย่าง
class AVLTree { constructor() { // Initialize a root element to null. this.root = null; } getBalanceFactor(root) { return this.getHeight(root.left) - this.getHeight(root.right); } getHeight(root) { let height = 0; if (root === null) { height = -1; } else { height = Math.max(this.getHeight(root.left), this.getHeight(root.right)) + 1; } return height; } } AVLTree.prototype.Node = class { constructor(data, left = null, right = null) { this.data = data; this.left = left; this.right = right; } };