Создание и обход бинарного дерева (реализация JavaScript)

JavaScript

Двоичное дерево — одна из распространенных структур данных и, конечно же, одна из структур данных, с которыми должны быть знакомы программисты. Я использовал его, когда был первокурсникомC++а такжеC语言Я реализовал это, и я использую его недавноjavascript, просто пишиjavascriptВариант с бинарным деревом, думаю, не будет слишком сложным.

Создать бинарное дерево

Некоторые распространенные бинарные деревья

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

binary-tree
Рисунок 1 имеет только один корневой узел, а Рисунок 2 и Рисунок 5 имеют два узла, кроме листовых узлов Рисунок 3 и Рисунок 4 являются более крайними случаями, только левое поддерево/правое поддерево, многие люди в Интернете пишут, что это называетсявырождаться в линейную таблицу

код реализации

Обычно используются бинарные деревья.создается в видеjavscriptЕсть сейчасНо для того, чтобы ознакомиться с прототипом, мы все равно используем прототип для симуляции.поведение. Вот реализованный код:

function Node(){
    this.data = null
    this.leftChild = null
    this.rightChild = null
}

function BinaryTree(){
    Node.call(this)
    this.root = null
}

Вы можете видеть, что здесь определены два класса, один из которыхNodeкласс, а другойbinaryTreeДобрый. Один из узлов содержит поле данных и его левый и правый указатели, а дерево содержит все атрибуты, содержащиеся в узле, и корневой узел. Здесь его можно рассматривать как подкласс дерева, и в следующем используется原型Чтобы реализовать отношения наследования между ними:

// 实现继承
;(function () {
    const F = function () {}
    F.prototype = Node.prototype
    BinaryTree.prototype = new F()
    BinaryTree.prototype.constructor = BinaryTree
})()

BinaryTree.prototype.insertNode = function(data){
    if(this.root === null){
    	this.root = {}
    	this.root.data = data
    }else{
    	insertNode(this.root, data)
    }
}

обход бинарного дерева

Общие методы обхода бинарного дерева:前序遍历,后序遍历,中序遍历так же как层次遍历, эти методы обхода можно использовать递归добиться, конечно, с помощью队列илиЭтого тоже можно добиться, но递归Или, если быть более кратким, код выглядит следующим образом:

BinaryTree.prototype.travelTree = function (root) { //前序遍历
    console.log(root.data)
    this.travelTree(root.leftChild)
    this.travelTree(root.rightChild)
}

ВышеупомянутоеjavascriptСоздание и обход реализованного бинарного дерева, полный код пожалуйстанажмите

Отсканируйте приведенный ниже QR-код или найдите «Учебный класс мистера Тони» и подпишитесь на мою общедоступную учетную запись WeChat, после чего вы сможете получать мои последние статьи как можно скорее.