JavaScript之BST

自己尝试用js实现了数据结构的二叉查找树。

// node
function Node(data) {
    this.data = data;
    this.lc = null;
    this.rc = null;
}

// BST
function BST() {
    this.root = null;
}
//======================create root node======================
BST.prototype.create = function(num) {
    this.root = new Node(num);
}
// ======================add tree node=========================
BST.prototype.insert = function(root, num) {
    var node = new Node(num);

    if(root.data < node.data) {
        if(!root.rc)
            root.rc = node;
        else
            this.insert(root.rc, num);
    } else {
        if(!root.lc)
            root.lc = node;
        else
            this.insert(root.lc, num);
    }
}

var bst = new BST();
var arr = [5,3,6,7,4,1,8];

// create root node
bst.create(arr[0]);
// create tree
for(var i = 1; i < arr.length; i++) {
    bst.insert(bst.root, arr[i]);
}
console.log(bst.root); 

第二种

// node
function Node(data) {
    this.data = data;
    this.lc = null;
    this.rc = null;
}

// BST
function BST() {
    this.root = null;
} 

// add tree node
BST.prototype.insert = function(num, bst) {
    var node = new Node(num);
    var isRootTree = (bst && bst.hasOwnProperty(‘root‘)); // 判断传入的是一棵树还是一个节点
    var root = isRootTree ? bst.root : bst;

    if(isRootTree && !root) { // 如果传入的参数为树且该树的root为null
            bst.root = node; // 初始化root,不能用root = node,
            // 因为这样不会改变bst.root,而是另root变量重新指向了一个新node节点
    } else {
        var target = root.data < num ? ‘rc‘ : ‘lc‘; // 避免bst为null带来的error
        root[target] == null ? root[target] = node : this.insert(num, root[target]);
     }
}; 

var bst = new BST();
var arr = [5,9,6,7,4,1,8];

for(var i = 0; i < arr.length; i++) {
    bst.insert(arr[i], bst);
}
console.log(bst.root);

第三种  通过迭代

// node
function Node(data) {
    this.data = data;
    this.left = null;
    this.rifht = null;
}

// BST
function BST() {
    this.root = null;
}
BST.prototype.insert = function(data){
    var node = new Node(data, null, null);
    if(this.root == null){
        this.root = node;
    }
    else{
        var currNode = this.root;
        var parent; 

        while(true){
            parent = currNode;
            if(data < currNode.data){
                currNode = currNode.left;
                if(currNode == null){
                    parent.left = node;
                    break;
                }
            }
            else{
                currNode = currNode.right;
                if(currNode == null){
                    parent.right = node;
                    break;
                }
            }
        }
    }
};

BST.prototype.orderVisit = function(root) {
  if(root) {
      this.orderVisit(root.left);
      console.log(root.data);
      this.orderVisit(root.right);
  }
};

var arr = [5,4,6,3,7,2,8];
var bst = new BST();

for(var i = 0; i < arr.length; i++)
    bst.insert(arr[i]);

bst.orderVisit(bst.root);
时间: 2024-11-07 15:59:53

JavaScript之BST的相关文章

javascript实现BST

思路:1.建立节点构造函数2.插入节点过程:先判断当前节点上是否有值,有则通过与当前节点值比较,进入左节点或者右节点,否则将值赋给当前节点3.创建二叉树和根节点,并进行节点添加4.遍历节点上的值,对创建的二叉树测试function Node(){ this.value = null; this.lChild = null; this.rChild = null; } function BSTInsert(node,value){ if(node.value === null) { node.va

[LeetCode][JavaScript]Kth Smallest Element in a BST

Kth Smallest Element in a BST Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You may assume k is always valid, 1 ≤ k ≤ BST's total elements. Follow up: What if the BST is modified (insert/delete

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh

第一章:数据结构与算法javascript描述

在前端工程师中,常常有一种声音,我们为什么要学数据结构与算法,没有数据结构与算法,我们一样很好的完成工作.实际上,算法是一个宽泛的概念,我们写的任何程序都可以称为算法,甚至往冰箱里放大象,也要通过开门,放入,关门这样的规划,我们也可以视作为一种算法.可以说:简单的算法是人类的本能.而算法的知识的学习则是吸取前人的经验.对于复杂的问题进行归类,抽象,帮助我们脱离刀耕火种的时代,系统掌握一个算法的过程. 随着自身知识的增长,不论是做前端,服务端还是客户端,任何一个程序员都会开始面对更加复杂的问题,算

二叉查找树的表示javascript

树是一种非线性的数据结构,以分层的方式存储数据.树被用来存储具有层级关系的数据,比如文件系统中的文件:树还被用来存储有序列表.这里将研究一种特殊的树:二叉树.选择树而不是那些基本的数据结构,是因为在二叉树上进行查找非常快(而在链表上查找则不是这样),为二叉树添加或删除元素也非常快(而对数组执行添加或删除操作则不是这样). 树是n个结点的有限集.最上面的为根,下面为根的子树.树的节点包含一个数据元素及若干指向其子树的分支.结点拥有的子树称为结点的度.度为0的结点称为叶子或终端结点.度不为0的结点称

JavaScript数据结构——树

树:非顺序数据结构,对于存储需要快速查找的数据非常有用. 二叉树:二叉树中的节点最多只能有两个子节点(左侧子节点和右侧子节点).这些定义有助于我们写出更高效的向/从树中插入.查找和删除节点的算法. 二叉搜索树:二叉树的一种,但是它只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大/等于的值. 遍历一棵树:是指访问树的每个节点并对它们进行某种操作的过程.访问树的所有节点有三种方式:中序.先序和后序. 中序遍历:是一种以上行顺序访问 BST 所有节点的的遍历方式,也就是以从最小到

JavaScript数据结构和算法

前言 在过去的几年中,得益于Node.js的兴起,JavaScript越来越广泛地用于服务器端编程.鉴于JavaScript语言已经走出了浏览器,程序员发现他们需要更多传统语言(比如C++和Java)提供的工具.这些工具包括传统的数据结构(如链表,栈,队列,图等),也包括传统的排序和查找算法.本文主要是总结什么情况下使用何种数据结构较好,并没有细讲里面的原理和实现方式,仅仅提供给阅读过<数据结构和算法>的同学作为总结和参考笔记,如果未细究过数据结构和算法的同学,本文也可以作为一个方向,希望能引

JavaScript数据结构总结

一.什么是数据结构高层数据结构是用于存储和组织数据的技术,这些数据使修改,导航和访问变得更加容易.数据结构决定了如何收集数据,我们可以用来访问数据的功能以及数据之间的关系.数据结构几乎用于计算机科学和编程的所有领域,从操作系统到基本的编码再到人工智能.数据结构使我们能够: 管理和利用大型数据集 从数据库中搜索特定数据 针对特定程序量身定制的设计算法 一次处理来自用户的多个请求 简化并加速数据处理 数据结构对于有效,现实地解决问题至关重要.毕竟,我们组织数据的方式对性能和可用性有很大影响.实际上,

Javascript中call的使用

call 方法应用于:Function 对象调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,   [,.argN]]]]])参数:thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选项.将被传递方法参数序列. 说明:call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象.如果没有提供 thisObj 参数,那么 G