二叉树每个节点的子节点不允许超过两个,通过将子节点的个数限制为2,可以写出高效的程序在书中插入,查找和删除数据。
在使用js构建二叉树之前,需要给我们关于树的词典里加两个新名词,一个父节点的两个子节点分别称为左节点和又节点,做节点包含一组特定的值,右节点包含一组特定的值:
那么我们来实现以下二叉树(当然有很多实现的方式这里只是简单的实现而已):
function TreeNode(key){
//节点的值
this.key = key;
//左孩子
this.left = null;
//右孩子
this.right = null;
}
//定义全局的变量根节点
var root = null;
//插入节点
function insertNode(key){
//创建节点
var node = new TreeNode(key);
//添加元素节点
if(root === null){
//如果根节点为空的话创建节点该节点作为根节点
root = node;
}else{
insertNewNode(root,node);
}
}
function insertNewNode(rootNode,newNode){
if(rootNode.key > newNode.key){
//放到左子树
if(rootNode.left != null){
//以根节点的为根节点
insertNewNode(rootNode.left,newNode);
}else{
rootNode.left = newNode;
}
}else{
if(rootNode.right != null){
insertNewNode(rootNode.right,newNode);
}else{
rootNode.right = newNode;
}
}
}
var testArray = [2,9,1,10,7,4];
testArray.forEach(function(key){
insertNode(key);
});
console.log("root is " + root);
//遍历二叉查找树
/***
中序遍历实现排序的功能
*/
function centerOrder(node){
if(node != null){
//先遍历左子树的节点
centerOrder(node.left);
//显示当前节点的数据
console.log(node.key);
centerOrder(node.right);//显示右子树的节点
}else{
return;
}
}
centerOrder(root);
2:利用二叉树查找最小值和最大值
获得最大值:
//找到最小值只需要遍历左子树就行了
function findMinNumber(node){
var currentNode = node;
while((currentNode.left != null)){
currentNode = currentNode.left;
}
return currentNode.key;
}
//找到最大值
function findMaxNumber(node){
var currentNode = node;
while((currentNode.right != null)){
currentNode = currentNode.right;
}
return currentNode.key;
}