二叉树的创建及遍历(JavaScript实现)

8,119 阅读2分钟

二叉树是常见的数据结构之一,当然也是程序猿必须得熟悉的数据结构之一。大一时我用过C++C语言实现过它,那最近都在用javascript,索性就写一下javascript版本的二叉树,相信不会太难。

创建二叉树

一些常见的二叉树

学过二叉树的都应该知道,一棵二叉树最多只能有两个分支结点,当然也能没有结点。下图是常见的二叉树的形式:
binary-tree 图一只有一个根结点,而图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) { //前序遍历
    // 经评论区提醒,此处少了判空
    if (!root) {
        return
    }
    console.log(root.data)
    this.travelTree(root.leftChild)
    this.travelTree(root.rightChild)
}

以上就是javascript实现的二叉树的创建和遍历,完整的代码请点击

扫描下方的二维码或搜索「tony老师的前端补习班」关注我的微信公众号,那么就可以第一时间收到我的最新文章。