樹是一種分層資料模型。
我曾經寫過乙個json解析成影象來操作的外掛程式,用的就是樹的結構。
所謂二叉樹—最多只能有兩個子節點。 即左節點和右節點
二叉樹應用最為廣泛。
我們規定,二叉樹左側只能存放比本節點小的值,右側存放不小於本節點的值。 這樣子的樹,便於搜尋,我們稱為二叉搜尋樹。
先構建兩個基礎類,二叉搜尋樹類和節點類(私有類)
;(function
(root) ;
// 樹
function
tree
() // 註冊公開類
root.tree = tree;
})(this);
實現新增方法
this.insert = function
(key) else
};function
insertnode
(node, newnode) else
} else else
}}
再實現遍歷方法
this.foreach = function
(fn) ;
function
foreach
(node, fn)
}
再實乙個求最小值方法
this.min = function
() ;
function
minnode
(node)
minnode = node;
}return minnode;
}
最後實現移除方法
this.remove = function
(key) ;
function
remove
(node, key) ;
if (key < node.key) else
if (key > node.key) else
// 右節點有值,右節點替換該節點
if (node.left === null)
// 左節點有值,左節點替換該節點
else
if (node.right === null) ;
// 有兩個子節點,子樹最小值替換當前節點
var currnode = minnode(node.right);
node.key = currnode.key;
node.right = remove(node.right, currnode.key);
return node;
}};
大功告成
;(function
(root) ;
function
tree
() else
};this.foreach = function
(fn) ;
this.min = function
() ;
this.max = function
() ;
this.remove = function
(key) ;
function
remove
(node, key) ;
if (key < node.key) else
if (key > node.key) else
if (node.left === null) else
if (node.right === null) ;
var currnode = minnode(node.right);
node.key = currnode.key;
node.right = remove(node.right, currnode.key);
return node;}};
function
maxnode
(node)
maxnode = node;
}return maxnode;
}function
minnode
(node)
minnode = node;
}return minnode;
}function
foreach
(node, fn)
}function
insertnode
(node, newnode) else
} else else }}
};root.tree = tree;
})(this);
我們測試一下:
var tree = new tree();
tree.insert(2);
tree.insert(10);
tree.insert(6);
tree.insert(7);
tree.insert(8);
tree.insert(1);
tree.insert(55);
tree.insert(9);
tree.foreach(function (n));
console.log(tree.min());
tree.remove(55);
console.log(tree.max());
資料結構 棧(JavaScript)
棧是一種遵從後進先出 lifo 原則的有序集合。新新增的或待刪除的元素都儲存在棧的 末尾,稱作棧頂,另一端就叫棧底。在棧裡,新元素都靠近棧頂,舊元素都接近棧底。舉個栗子,差不多這樣子。初始化棧的高度以及棧頂指標 var length 0 var top null 宣告常用方法 this.push f...
二 javascript資料結構
1 識別符號 var test test 定義變數開頭不能是數字 var 1a 1a 定義變數開頭可以是下劃線 var a a 定義變數開頭可以是中文 var 變數 a 2 關鍵字與保留字 就是這些保留字關鍵字,你不能定義變數或者函式等等,反正別用就行了 abstract arguments boo...
資料結構 前言(0)
為什麼學習資料結構?資料結構作為構建高效演算法的必要基礎,在電腦科學領域中,起到了技術體系的基石的作用。而其中涉及的知識,在相關專業的課程系統中也始終處於核心位置。以acm ieee computing curricula 計算機教學大綱 2005年版為例,其中對於幾個相關專業 電腦科學,計算機工程...