В уровневом порядке узел вставки вставляется в двоичное дерево уровень за уровнем. Ни один узел не будет вставлен на следующий уровень, пока не будет заполнен последний уровень.
На рис. 1 нам нужно вставить узел 5. На уровнях 0 и 1 нет свободных мест. На уровне 2 узел 2 не имеет левых дочерних элементов, а узел 3 не имеет дочерних элементов, но первое свободное место является левым дочерним элементом узла 2, поэтому узел 5 будет вставлен, как показано на рис. 1.
Мы можем инициализировать дерево следующим образом.
class Tree { constructor() { this.root = null; }
Дерево состоит из узлов, поэтому у нас должен быть один класс узлов.
class Node { constructor(data) { this.data = data; this.left = null; this.right = null; } }
Теперь нам нужно создать метод для вставки узлов в дерево.
Если в дереве нет ни одного узла, то новый узел будет корневым.
insert(data){ if(this.root===null) this.root= new Node(data) }
Здесь this.root будет ссылаться на корень дерева, потому что метод вставки создается внутри класса дерева.
Для обхода порядка уровней мы будем использовать структуру данных очереди, основанную на механизме «первым пришел — первым обслужен». Остальная часть кода выглядит следующим образом.
insert(data) { const q = []; if (this.root === null) { this.root = new Node(data); } else { q.push(this.root); while (q.length !== 0) { const node = q.shift(); if (node.left === null) { node.left = new Node(data); break; } else { q.push(node.left); } if (node.right === null) { node.right = new Node(data); break; } else { q.push(node.right); } } }
Если вы заинтересованы в дальнейшем чтении о дереве и о том, как мы можем перемещаться по дереву, вы можете перейти по ссылке ниже.
Спасибо за прочтение :)