Выводит следующее:
/**
* Простое двоичное дерево поиска (BST)
* @constructor
*/
// Определение узла
function Node(data, left, right) {
this.data = data; // данные
this.left = left; // левый узел
this.right = right; // правый узел
this.show = show; // Отображаем данные узла
}
// Класс двоичного дерева
function BST() {
this.root = null; // корневой узел
this.insert = insert; // Вставляем узел
this.preOrder = preOrder; // обход предварительного заказа
this.find = find; // найти узел
this.getMax = getMax; // находим максимальное значение
}
// Отображение данных узла
function show() {
return this.data
}
function insert(data) {
var n = new Node(data, null, null)
if (this.root === null) {
this.root = n
} else {
var current = this.root
var parent
while (true) {
parent = current
if (data < current.data) {
current = current.left
if (current === null) {
parent.left = n
break
}
} else {
current = current.right
if (current === null) {
parent.right = n
break
}
}
}
}
}
// Обход первого порядка
function preOrder(node) {
if (node !== null) {
console.log(node.show())
preOrder(node.left)
preOrder(node.right)
}
}
// Находим узел
function find(data) {
var current = this.root
while (current !== null) {
if (current.data === data) {
return current
} else if (data < current.data) {
current = current.left
} else {
current = current.right
}
}
return null
}
// Находим максимальное значение
function getMax(root) {
var current = this.root || root
while (current.right !== null) {
current = current.right
}
return current
}
var bst = new BST()
bst.insert(23);
bst.insert(45);
bst.insert(16);
bst.insert(37);
bst.insert(99);
bst.insert(22);
bst.preOrder(bst.root)
console.log(bst)
console.log('Максимум ->' + bst.getMax(bst.root))