数据结构之二叉搜索树BST--JavaScript实现

原理:

叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树存储结构中序遍历二叉排序树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。每次插入的新的结点都是二叉排序树上新的叶子结点,在进行插入操作时,不必移动其它结点,只需改动某个结点的指针,由空变为非空即可。搜索,插入,删除的复杂度等于树高,O(log(n)).

JavaScript实现:

        
        var BinarySearchTree = function(){
            this.root = null;
            
        }
        
        BinarySearchTree.prototype = {
            insert: (key){//插入
                var newNode = new this.Node(key);
                if(this.root === ){
                    this.root = newNode;
                }else{
                    this.insertNode(.root,newNode)
                }
                console.log(.root)
            },inOrderTraverse: (callback){//中序查找
                this.inOrderTraverseNode((callback){//先序查找
                this.preOrderTraverseNode((callback){//后序查找
                this.postOrderTraverseNode((){//最小值
                return this.minNode((){//最大值
                this.maxNode((key){//查找
                this.searchNode((key){//移除树节点
                this.removeNode((key){
                this.key = key;
                this.left = ;
                this.right = ;
            },insertNode: (node,newNode){
                if(newNode.key < node.key){
                    if(node.left === ){
                        node.left = newNode;
                    }{
                        .insertNode(node.left,newNode)
                    }
                }if(node.right === ){
                        node.right =.insertNode(node.right,newNode)
                    }
                }
            },inOrderTraverseNode: if(node !== .inOrderTraverseNode(node.left,callback);
                    callback(node.key);
                    .inOrderTraverseNode(node.right,callback);
                }
            },preOrderTraverseNode: ){
                    callback(node.key);
                    .preOrderTraverseNode(node.left,callback);
                    .preOrderTraverseNode(node.right,postOrderTraverseNode: .postOrderTraverseNode(node.left,1)">.postOrderTraverseNode(node.right,callback);
                    callback(node.key);
                }
            },minNode: (node){
                if(node){
                    while(node && node.left !== ){
                        node = node.left;
                    }
                    return node.key;
                }
                while(node && node.right !==  node.right;
                    }
                    if(node === )
                falseif(key <.searchNode(node.left,key);
                }else if(key >.searchNode(node.right,1)">true;
                }
            },removeNode(node,1)">;
                
                 node.key){
                    node.left = .removeNode(node.left,key);
                     node;
                } node.key){
                    node.right = .removeNode(node.right,1)">null && node.right === ){
                        node = ;
                         node;
                    } node.right;
                         node.left;
                         node;
                    }
                    
                    var aux = .findMinNode(node.right);
                    node.key = aux.key;
                    node.right =  node;
                }
            },findMinNode: ;
            }
        }
        

 

原文地址:https://www.cnblogs.com/guojikun

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)