二叉樹是常見的數據結構之一,固然也是程序猿必須得熟悉的數據結構之一。大一時我用過
C++
和C語言
實現過它,那最近都在用javascript
,索性就寫一下javascript
版本的二叉樹,相信不會太難。javascript
學過二叉樹的都應該知道,一棵二叉樹最多隻能有兩個分支結點,固然也能沒有結點。下圖是常見的二叉樹的形式:
前端
一般二叉樹都是用類
的形式來建立的,雖然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老師的前端補習班」關注個人微信公衆號,那麼就能夠第一時間收到個人最新文章。 數據結構