
Я считаю, что в реальной жизни каждый знаком с деревьями. Будь то ивы, тополя или персиковые деревья, можно сказать, что в компьютерном мире деревья можно увидеть повсюду, деревья — это абстракция ; иерархической структуры ,
как показано ниже:

Существует множество применений древовидной структуры. Например, организационную структуру компании можно представить в виде дерева, как показано ниже:

Помимо организационных структур, такие вещи, как генеалогические деревья, провинции, города и т. д., могут быть представлены с использованием древовидных структур.
Существует множество терминов для обозначения деревьев, как показано ниже:

n=0 , оно называется пустым деревом;ADH ;является одной из наиболее распространенных структур данных во внешнем интерфейсе, например дерево DOM, каскадный выбор, компоненты дерева и т. д.
JavaScript не предоставляет древовидную структуру данных, но мы можем ее использовать; объекты и массив для имитации дерева,
например следующий код:
const Tree = {
значение: 'А',
дети: [
{
значение: 'Б',
дети: [
{значение: 'E', дети: ноль},
{значение: 'F', дети: ноль},
],
},
{
значение: 'С',
дети: [{ значение: 'G', дети: ноль }],
},
{
значение: 'D',
дети: [
{значение: 'H', дети: ноль},
{значение: 'Я', дети: ноль},
],
},
],
} Так называемый алгоритм обхода в глубину предназначен для максимально глубокого поиска ветвей дерева. Его порядок обхода следующий:

Идея реализации следующая:
children корневого узла,код реализации следующий:
function dfs(root) {;
console.log(root.value)
root.children && root.children.forEach(dfs) // Соответствует следующему // if (root.children) {
// root.children.forEach(child => {
//dfs(дочерний)
// })
// }
}
dfs(tree) //Это дерево является деревом, определенным ранее/* Результат A
Б
Э
Ф
С
Г
Д
ЧАС
я
*/ Как видите, порядок соответствует картинке, а значит проблем с нашим алгоритмом нет.
Так называемый приоритет ширины заключается в посещении узлов, ближайших к корневому узлу, по порядку. Порядок его обхода следующий:

Идея реализации следующая:
children головы очереди последовательноКод реализации следующий:
function bfs(root) {
// 1. Создать новую очередь и добавить в нее узлы const q = [root]
// 4 Повторяем while (q.length > 0) {
const node = q.shift() // 2-й заголовок очереди выводится из очереди console.log(node.value)
// В команду добавляются 3 ребенка, глава команды node.children &&
node.children.forEach(child => {
q.push(ребенок)
})
}
}
bfs(дерево)
/* Результат А
Б
С
Д
Э
Ф
Г
ЧАС
я
*/ Как видите, порядок соответствует картинке, а значит проблем с нашим алгоритмом нет.