二叉樹的建立及遍歷(JavaScript實現)

二叉樹是常見的數據結構之一,固然也是程序猿必須得熟悉的數據結構之一。大一時我用過C++C語言實現過它,那最近都在用javascript,索性就寫一下javascript版本的二叉樹,相信不會太難。javascript

建立二叉樹

一些常見的二叉樹

學過二叉樹的都應該知道,一棵二叉樹最多隻能有兩個分支結點,固然也能沒有結點。下圖是常見的二叉樹的形式:
前端

binary-tree
圖一隻有一個根結點,而圖2和圖5除葉子節點外都有兩個節點,圖3和圖4則是比較極端的狀況,只有左子樹/右子樹,網上不少人都把它叫作 退化成爲線性表

實現代碼

一般二叉樹都是用的形式來建立的,雖然javscript如今也有了,可是爲了熟悉一下原型,這裏仍是用原型來模擬的行爲。如下是實現的代碼:java

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

function BinaryTree(){
    Node.call(this)
    this.root = null
}
複製代碼

能夠看到這裏定義了兩個類,一個是Node類,另外一個是binaryTree類。其中一個結點含有數據域,和它的左指針以及右指針,而一顆樹則含有結點包含的一切屬性,以及一個根節點。這裏能夠看作樹是結點的子類,下面則利用原型來實現它們之間的繼承關係:git

// 實現繼承
;(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)
    }
}
複製代碼

遍歷二叉樹

常見的二叉樹遍歷方式有:前序遍歷後序遍歷中序遍歷以及層次遍歷,這些遍歷方式能夠用遞歸來實現,固然用隊列或者來實現也是能夠的,可是遞歸仍是要來得簡潔一些,代碼以下:github

BinaryTree.prototype.travelTree = function (root) { //前序遍歷
    console.log(root.data)
    this.travelTree(root.leftChild)
    this.travelTree(root.rightChild)
}
複製代碼

以上就是javascript實現的二叉樹的建立和遍歷,完整的代碼請點擊微信

掃描下方的二維碼或搜索「tony老師的前端補習班」關注個人微信公衆號,那麼就能夠第一時間收到個人最新文章。 數據結構

相關文章
相關標籤/搜索