js二分查找树实现

    function BinaryTree() {
        var Node = function(key) {
            this.key = key;
            this.left = null;
            this.right = null;
        }
        var root = null;
        var insertNode = function(node, newNode) {
            if (newNode.key < node.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.insert = function(key) {
            var newNode = new Node(key);
            if(root === null){
                root = newNode;
            } else {
                insertNode(root, newNode)
            }
        }
        this.inOrderTraverseNode = function(node,callback){
            if(node !==null) {
                inOrderTraverseNode(node.left,callback);
                callback(node.key);
                inOrderTraverseNode(node.right,callback)
            }
        }
        this.inOrderTraverse = function(callback) {
            inOrderTraverseNode(root,callback)
        }
    }

    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.inOrderTraverse(callback);
    

原文地址:https://www.cnblogs.com/kbnet/p/10242025.html

时间: 2024-11-07 02:19:56

js二分查找树实现的相关文章

数据结构之二分查找树总结

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 二分查找树BST(也叫二叉查找树.二叉排序树)的提出是为了提供查找效率,之所以称为二分查找树,因为该二叉树对应着二分查找算法,查找平均的时间复杂度为o(logn),所以该数据结构的提出是为了提高查找效率. 定义 二分查找树或者是一棵空树,或者具有下列性质: 1.若它的左子树不为空,则左子树上所有结点的值均小于根结点的值: 2.若它的右子树不为空,则右子树上所有结点的值均大于根结点的值: 3.它的左右子树均为二分查找树. 操作 二分查找树的操作主

排序列表转换为二分查找树

题目 给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 解题 找到中间点,建立树的根结点 左右半边递归 注意: 右半边链表可以根据找到的中间节点进行递归 左半边要找到结束位置,这里我新建了一个链表 /** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = n

lintcode——排序列表转换为二分查找树(链表,二叉排序树)

中等 排序列表转换为二分查找树查看运行结果 27% 通过 给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 您在真实的面试中是否遇到过这个题? Yes 样例 标签 Expand 相关题目 Expand 思路: 这道题将排好序的链表转化为二叉排序树,即左子树<根节点<右子树 采用递归的方法,在链表上选取中间点作为根节点, 每次传入的参数为,需要创建的根节点的指针(这里由于要改变指针的值,所以要传入指针的指针),链表开始指针,结尾指针,链表结点个数( 这里传入了个数之后,就不

LintCode-排序列表转换为二分查找树

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 您在真实的面试中是否遇到过这个题? Yes 样例 标签 Expand 相关题目 Expand 分析:就是一个简单的递归,只是需要有些链表的操作而已 代码: /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->

SPOJ TEMPLEQ - Temple Queues(二分查找+树状数组)

题意: 有N个队伍(1 <= N <= 100,000),每个队伍开始有ai个人[0 <= ai<= 100,000,000],有Q个操作[0<=Q<= 500,000] 操作分为三种,1 A:表示在第A个队列加一个人. 2 X:表示求长度大于等于X队列数量.3 Y:表示所有长度大于等于Y的队列减去一个人. 题解: 把各个队列按长度排序 用差分数列来维护这个数组,这样求每个队列的长度就是求前缀和.每次求长度的复杂度是lgn,因为队列是按长度排序的,所以可以通过二分查找到

js 二分查找(Binary Search)

数组二分查找: 1.先对数组排序,从小到大排序 2.定义两个指针,左指针(left)指向数组第一个元素,右指针(right)指向数组最后一个元素 3.取数组中间(nums[mid])的项和目标值(target)比较 4.如果中值小于目标值,说明目标值在后半数组,将左指针(left)指向nums[mid+1],若大于同理.如果相等就直接返回 5.如果左指针指向的项的索引大于右指针指向的项的索引,说明已经查找完了也没找到目标值,返回-1 代码如下: var search = function(num

js 二分查找法之每日一更

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html"/> <meta name="keywords" content="二分查找算法" /> <meta name="description" content="二分查找算法&

二分查找树

//二叉查找树的定义,查询,插入,删除public class BSTree<T extends Comparable<T>>{ private BSTNode<T> mRoot;//定义根节点    //定义节点    private class BSTNode<T extends Comparable<T>>{        T key;        BSTNode<T> left; //左节点        BSTNode&l

js 二分查找的实现

1.递归实现 function binarySearch(data, dest, start, end){ var end = end || data.length - 1, start = start || 0, m = Math.floor((start + end) / 2); if(data[m] == dest){ return m; } if(dest < data[m]){ return binarySearch(data, dest, 0, m-1); }else{ return