Минимальная глубина бинарного дерева в JavaScript
Структуры данных могут быть немного сложными, особенно для тех, у кого нет традиционной степени CS. Тем не менее, любой может улучшить их со временем и практикой. Сегодня я собираюсь показать, что вам нужно решить минимальную глубину двоичного дерева.
Двоичное дерево — это древовидная структура данных, в которой каждый узел имеет не более двух потомков, которые называются левым дочерним элементом и правым дочерним элементом. ребенок. Нахождение минимальной глубины бинарного дерева — это насколько глубоко дерево, в котором мы достигаем конечного узла. Листовой узел — это узел, у которого нет дочерних элементов.
Давайте начнем, вы можете сделать это с помощью поиска в глубину или поиска в ширину. Я использую поиск в ширину, потому что хочу сначала посетить каждый узел на одном уровне. Вы можете сделать это рекурсивно с DFS, но это зависит от вас.
В BFS мы используем очередь. Очередь — это структура данных LIFO, которая поступает последним, мы хотим посетить узел и его дочерние элементы. Мы также хотим вести общий подсчет минимальной глубины. Мы начинаем с -1, потому что, когда мы выталкиваем корень, он становится равным нулю, глубина корня всегда равна нулю, мы не углублялись
function binary_tree_min_depth(root) { let queue = [] queue.push(root) let minDepth = -1 }
Теперь нам нужно выполнить итерацию в очереди и добавить дочерние узлы в очередь. и увеличьте промежуточную сумму, потому что, хотя в очереди есть узел, это означает, что в ней больше глубины
while(queue.length > 0){ minDepth++ let level = queue.length
Теперь наступает встреча с кодом, нам нужно идти уровень за уровнем и получать дочерние элементы каждого поддерева.
let level = queue.length for(let i = 0; i < level; i++){ let node = queue.shift() //pop node off the queue //if there are no left and right children thats our mindepth if(!node.left && !node.right ){ return minDepth } //if there are more nodes to left and right add to queue if(node.right !== null){ queue.push(node.right) } if(node.left !== null){ queue.push(node.left) } } }
После всего проделанного возвращаем minDepth
function binary_tree_min_depth(root) { // WRITE YOUR BRILLIANT CODE HERE let queue = [] queue.push(root) let minDepth = -1 while(queue.length > 0){ minDepth++ let level = queue.length for(let i = 0; i < level; i++){ let node = queue.shift() if(!node.left && !node.right ){ return minDepth } if(node.right !== null){ queue.push(node.right) } if(node.left !== null){ queue.push(node.left) } } } return minDepth }
Это! Вот как вы находите минимальную глубину двоичного дерева в Javascript.