Полное бинарное дерево — это бинарное дерево, у которого все уровни, кроме последнего, полностью заполнены, а все листья последнего уровня расположены слева.
Другими словами -
Полное бинарное дерево — это бинарное дерево, в котором все узлы заполнены, кроме конечных узлов, а листовые узлы расположены сначала слева.
Теперь давайте подумаем о преобразовании массива в полное бинарное дерево —
Мы знаем, что в представлении бинарного дерева в виде массива левый дочерний элемент узла существует с индексом 2i+1, а правый дочерний элемент — с 2i+2.
Эту концепцию можно использовать для заполнения узлов и создания дерева.

Давайте попробуем понять из приведенного выше изображения -
Сначала мы пытаемся использовать первый элемент массива с индексом 0,
поэтому для индекса = 0
корень = массив[0]; // 2
root.left = массив [2*0+1] // 3
root.right = массив[2*0+2] // 6
Теперь напишем программу -
class Node {
constructor(value) {
this.data = value;
}
}
class BinaryTree {
constructor() {
this.root = null;
}
inOrderTraversal() {
const traverse = (root) => {
if (root == null) {
return;
}
traverse(root.left);
console.log(root.data);
traverse(root.right);
}
traverse(this.root);
}
}
function createCompleteBinaryTreeFromArray(arr) {
const length = arr.length;
const binaryTree = new BinaryTree();
const traverseAndReplace = (root, i) => {
if (i < length) {
root = new Node(arr[i]);
root.left = traverseAndReplace(root.left, 2 * i + 1);
root.right = traverseAndReplace(root.right, 2 * i + 2);
}
return root;
}
binaryTree.root = traverseAndReplace(binaryTree.root, 0);
return binaryTree;
}
const result = createCompleteBinaryTreeFromArray([1, 2, 3, 4, 5, 6, 6, 6, 6]);
result.inOrderTraversal();
В методе создания мы проверяем, меньше ли индекс длины, а затем присваиваем значение корню, левому и правому краю.