二叉樹是常見的資料結構之一,當然也是程式猿必須得熟悉的資料結構之一。大一時我用過
C++
和C語言
實現過它,那最近都在用javascript
,索性就寫一下javascript
版本的二叉樹,相信不會太難。
建立二叉樹
一些常見的二叉樹
學過二叉樹的都應該知道,一棵二叉樹最多隻能有兩個分支結點,當然也能沒有結點。下圖是常見的二叉樹的形式:
實現程式碼
通常二叉樹都是用類
的形式來建立的,雖然javscript
現在也有類
了,但是為了熟悉一下原型,這裡還是用原型來模擬類
的行為。以下是實現的程式碼:
function Node(){
this.data = null
this.leftChild = null
this.rightChild = null
}
function binaryTree(){
this.root = null
}
複製程式碼
可以看到這裡定義了兩個類,一個是Node
類,另一個是binaryTree
類。其中一個結點含有資料域,和它的左指標以及右指標,而一顆樹則含有結點包含的一切屬性,以及一個根節點。這裡可以看做樹是結點的子類,下面則利用原型
來實現它們之間的繼承關係:
binaryTree.prototype = {
constructor: Node,
insertNode: function(data){
if(this.root === null){
this.root = {}
this.root.data = data
}else{
insertNode(this.root, data)
}
}
}
//插入結點,這裡構造的是一顆二叉搜尋樹
function insertNode(node,data){
if(node.data < data){
if(node.leftChild === null){
node.leftChild = { data }
}else{
insertNode(node.leftChild, data)
}
}else{
if(node.rightChild === null){
node.rightChild = { data }
}else{
insertNode(node.rightChild, data)
}
}
}
複製程式碼
遍歷二叉樹
常見的二叉樹遍歷方式有:前序遍歷
、後序遍歷
、中序遍歷
以及層次遍歷
,這些遍歷方式可以用遞迴
來實現,當然用佇列
或者棧
來實現也是可以的,但是遞迴
還是要來得簡潔一些,程式碼如下:
binaryTree.prototype = {
constructor: Node,
...
travelTree: function(root){//前序遍歷
console.log(root.data)
this.travelTree(root.leftChild)
this.travelTree(root.rightChild)
}
}
複製程式碼
以上就是javascript
實現的二叉樹的建立和遍歷,完整的程式碼請點選