javaScript資料結構 07 二叉搜尋樹

2021-08-27 00:14:01 字數 2741 閱讀 8909

樹是一種分層資料模型。
我曾經寫過乙個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年版為例,其中對於幾個相關專業 電腦科學,計算機工程...