function BinarySearchTree() {
var Node = function(key){
this.key = key;
this.left = null;
this.right = null;
}
var root = null;
var i = 0;
this.insert = function(key){
var newNode = new Node(key); //{1}
if (root === null){ //{2}
root = newNode;
} else {
insertNode(root,newNode); //{3}
}
}
var insertNode = function(node,newnode){
if(node.key>newnode.key){
if(node.left==null)
node.left = newnode;
else
insertNode(node.left,newnode);
}else{
if(node.right==null)
node.right = newnode;
else
insertNode(node.right,newnode);
}
}
this.inOrderTraverse = function(callback){
inOrderTraverseNode(root, callback); //{1}
}
//中序遍歷 最深的左邊子節點開始 到此節點父節點 到 此節點父節點的右邊節點 一級級往上
/**中序遍歷是一種以上行順序訪問BST所有節點的遍歷方式,也就是以從最小到最大的順序訪問所有節點**/
var inOrderTraverseNode = function (node, callback) {
if (node !== null) { //{2}
inOrderTraverseNode(node.left, callback); //{3}
printNode(node.key); //{4}
inOrderTraverseNode(node.right, callback); //{5}
}
};
/**先序遍歷是以優先於後代節點的順序訪問每個節點的。先序遍歷的一種應用是打印一個結構化的文檔**/
var perTraverseNode = function (node, callback) {
if (node !== null) { //{2}
printNode(node.key); //{4}
perTraverseNode(node.left, callback); //{3}
perTraverseNode(node.right, callback); //{5}
}
};
/**後序遍歷則是先訪問節點的後代節點,再訪問節點本身。後序遍歷的一種應用是計算一個目錄和它的子目錄中所有文件所佔空間的大小**/
var postTraverseNode = function (node, callback) {
if (node !== null) { //{2}
postTraverseNode(node.left, callback); //{3}
postTraverseNode(node.right, callback); //{5}
printNode(node.key); //{4}
}
};
/**搜索最大值**/
this.max = function(){
return maxNode(root);
}
var maxNode = function(node){
if(node == null){
return false;
}
if(node){
while(node&&node.right!=null){
node = node.right;
}
return node.key;
}
return null;
}
this.search = function(key){
return searchNode(root, key); //{1}
};
var searchNode = function(node, key){
if (node === null){ //{2}
return false;
}
if (key < node.key){ //{3}
return searchNode(node.left, key); //{4}
} else if (key > node.key){ //{5}
return searchNode(node.right, key); //{6}
} else {
return true; //{7}
}
};
function printNode(value){ //{6}
console.log(value);
}
}
js二叉樹
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.