查找最大值
//查找最大值,根节点的右边比根节点的值大
var maxNode = function (node) {
if (node) {
//只要不为空,一直搜寻
while (node && node.right !== null) {
node = node.right;
}
return node.key;
}
return null;
}
this.max = function () {
//最大值
return maxNode(root);
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
console.log("max node is:" + binaryTree.max());
查找最小值
//查找最小值,根节点左边值小
var minNode = function (node) {
if (node) {
//循环搜索
while (node && node.left !== null) {
node = node.left;
}
return node.key;
}
return null;
}
this.min = function () {
//最小值
return minNode(root);
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
console.log("min node is:" + binaryTree.min());
查找指定数字
//查找具体的数值
var searchNode = function (node, key) {
if (node == null) {
//空树
return false;
}
if (key < node.key) {
//小于当前节点,在左子树搜索
return searchNode(node.left, key);
} else if (key > node.key) {
//大于当前节点,在右子树搜索
return searchNode(node.right, key);
} else {
//搜索成功
return true;
}
}
this.search = function (key) {
//调用函数,返回所要搜索值
return searchNode(root, key);
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
console.log(binaryTree.search(7) ? "key 7 is found" : "key 7 is not found");
console.log(binaryTree.search(9) ? "key 9 is found" : "key 9 is not found");
console.log(binaryTree.search(13) ? "key 13 is found" : "key 13 is not found");
删除
//删除节点
var removeNode = function (node, key) {
//空树
if (node === null) {
return null;
}
if (key < node.key) {
//左子树进行搜索查找
node.left = removeNode(node.left, key);
return node;
} else if (key > node.key) {
//右子树进行搜索查找
node.right = removeNode(node.right, key);
return node;
} else {
//未找到
if (node.left === null && node.right === null) {
node = null;
return node;
}
}
}
this.remove = function (key) {
root = removeNode(root, key);
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13];
var binaryTree = new BinaryTree();
nodes.forEach(function (key) {
binaryTree.insert(key);
});
//遍历整个二叉树
var callback = function (key) {
console.log(key);
}
binaryTree.remove(1);
binaryTree.postOrderTraverse(callback);
删除值为 1 的节点,后序排列输出二叉树查看删除结果。