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);
JavaScript之BST的更多相关文章
- 数据结构之二叉搜索树(BST)--JavaScript实现
原理: 叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构.中序遍历二叉排序树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二叉排序树变成一个有序序列,构造树的过程 ...
- javascript数据结构与算法-- 二叉树
javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...
- 第一章:javascript: 数据结构与算法
在前端工程师中,常常有一种声音,我们为什么要学数据结构与算法,没有数据结构与算法,我们一样很好的完成工作.实际上,算法是一个宽泛的概念,我们写的任何程序都可以称为算法,甚至往冰箱里放大象,也要通过开门 ...
- JavaScript数据结构——树
树:非顺序数据结构,对于存储需要快速查找的数据非常有用. 二叉树:二叉树中的节点最多只能有两个子节点(左侧子节点和右侧子节点).这些定义有助于我们写出更高效的向/从树中插入.查找和删除节点的算法. 二 ...
- JavaScript数据结构 (手打代码)
array: 数组创建: ); //创建一个长度为6的数组 ,,,,,); 数组方法: var str="I love javascript"; var single=str.sp ...
- JavaScript的数据结构和算法
所有JavaScript对象都有hasOwnProperty(value)的方法,用来返回一个表明对象是不是具有这个value Key值属性的布尔值. javaScript的方法 具有delete的方 ...
- JavaScript笔记 #07# 用js写算法
算法盒子初代(为了提高学习算法的热情...) 效果图: 所有代码放在单个html中: <!DOCTYPE html> <html> <head> <meta ...
- javascript数据结构与算法---二叉树(删除节点)
javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...
- javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)
javascript数据结构与算法---二叉树(查找最小值.最大值.给定值) function Node(data,left,right) { this.data = data; this.left ...
随机推荐
- tomcat 设置jvm 参数
在catalina.bat中设置 正确的做法是设置成这样set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx256m,避免JAVA_OPTS参数覆盖
- 矩阵[雅礼集训 2017 Day1]
SOL 奇奇怪怪的贪心(你也不要问我为什么) #include<bits/stdc++.h> #define N 1007 int f[N][N],sum,ans,Ha,bo,n,Ans; ...
- arm-linux-objdump反汇编使用指南
一. arm-linux-objdump常用来显示二进制文件信息,常用来查看反汇编代码 二. 常用选项: 1.-b bfdname 指定目标码格式 2.-disassemble或者-d 反汇编 ...
- VS代码生成工具ReSharper使用手册:配置快捷键(转)
原文:http://blog.csdn.net/fhzh520/article/details/46364603 VS代码生成工具ReSharper提供了丰富的快捷键,可以极大地提高你的开发效率. 配 ...
- SSM中(Spring-SpringMVC-Mybatis)(二:整合)
使用Maven整合一个SSM,当然要配有Maven环境,Maven的环境配置自行百度,挺好配的 创建一个Maven项目以后,目录结构如图所示: 然后就是各部分配置: 首先pom导入依赖jar包: &l ...
- Hyperledger Fabric 1.0 从零开始(十二)——fabric-sdk-java应用【补充】
在 Hyperledger Fabric 1.0 从零开始(十二)--fabric-sdk-java应用 中我已经把官方sdk具体改良办法,即使用办法发出来了,所有的类及文件都是完整的,在文章的结尾也 ...
- css 负边距
负边距 可以改变 他在文档流中的尺寸 当块级元素设置 margin: -10px; 这个快 的大小没变但是他的定位的位置向上串了,压住了上面的文字 而且在他后面的文字 会爬到他身上 而前面的文 ...
- 纯CSS3模拟星体旋转效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- css的学习笔记
CSS3有哪些新特性? 1. CSS3实现圆角(border-radius),阴影(box-shadow), 2. 对文字加特效(text-shadow.),线性渐变(gradient),旋转(tra ...
- assert断言
https://www.cnblogs.com/ggzss/archive/2011/08/18/2145017.html assert是一个宏定义,其作用是如果它的条件返回错误,则终止程序执行,原型 ...