js数据结构之--二叉树,二叉查找树

二叉树每个节点的子节点不允许超过两个,通过将子节点的个数限制为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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值