function BinarySearchTree() {
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);
}
}
var inOrderTraverseNode = function(node, callBack) {
if (node != null) {
inOrderTraverseNode(node.left, callBack);
callBack(node.key);
inOrderTraverseNode(node.right, callBack);
}
}
var printNode = function(value) {
console.log(value);
}
this.inOrderTraverse = function(callBack) {
inOrderTraverseNode(root, callBack)
}
var preOrderTraverseNode = function(node, callBack) {
if (node != null) {
callBack(node.key);
preOrderTraverseNode(node.left, callBack);
preOrderTraverseNode(node.right, callBack);
}
}
this.preOrderTraverse = function(callBack) {
preOrderTraverseNode(root, callBack);
}
var postOrderTraverseNode = function(node, callBack) {
if (node != null) {
postOrderTraverseNode(node.left, callBack);
postOrderTraverseNode(node.right, callBack);
callBack(node.key);
}
}
this.postOrderTraverse = function(callBack) {
postOrderTraverseNode(root, callBack);
}
var minNode = function(node) {
if (node) {
while (node && node.left != null) {
node = node.left;
}
return node.key;
}
return null;
}
this.min = function() {
return minNode(root);
}
var maxNode = function(node) {
if (node) {
while (node && node.right != null) {
node = node.right;
}
return node.key;
}
return null;
}
this.max = function() {
return maxNode(root);
}
var searchNode = function(node, key) {
if (node == null) {
return false;
}
if (key < node.key) {
return searchNode(node.left, key)
} else if (key > node.key) {
return searchNode(node.right, key)
} else {
return true;
}
}
this.search = function(key) {
return searchNode(root, key);
}
var findMinNode = function(node) {
if (node) {
while (node && node.left != null) {
node = node.left;
}
return node;
}
return null;
}
this.findMin = function() {
return findMinNode(root);
}
var removeNode = function(node, key) {
if (node == null) {
return null;
}
if (key < node.key) {
node.left = removeNode(node.left, key);
return node;
} else if (key > node.key) {
node.right = removeNode(node.right, key);
return node;
} else {
if (node.left == null && node.right == null) {
node = null;
return node;
}
if (node.left == null) {
node = null;
return node;
}
if (node.right == null) {
node = node.left;
return node;
}
var aux = findMinNode(node.right);
node.key = aux.key;
node.right = removeNode(node.right, aux.key);
return node;
}
}
this.remove = function(key) {
root = removeNode(root, key);
}
}
var tree = new BinarySearchTree();
tree.insert(11);
tree.insert(7);
tree.insert(15);
tree.insert(3);
tree.insert(9);
tree.insert(8);
tree.insert(10);
tree.insert(13);
tree.insert(12);
tree.insert(14);
tree.insert(20);
tree.insert(18);
tree.insert(25);
tree.insert(6);
tree.inOrderTraverse(function(key) {
console.log(key);
})
tree.preOrderTraverse(function(key) {
console.log(key);
})
tree.postOrderTraverse(function(key) {
console.log(key);
})
tree.min(function(key) {
console.log(key);
})
tree.max(function(key) {
console.log(key);
})
tree.findMin();
console.log(tree.search(6));
tree.remove(6);
console.log(tree.search(10));

JavaScript Tre的更多相关文章

  1. javascript初学者注意事项

    注:以下属于个人学习中的理解不能保证全部正确,如果有错误以后修正. 1.javascript和c#语言一样严格区分大小写,有没有类的概念. 2.所有的变量声明都使用var,虽然能打出蓝色int,但却不 ...

  2. JavaScript DOM 基础操作

    JavaScript DOM 基础操作 一.获取元素的六方式 document.getElementById('id名称') //根据id名称获取 document.getElementsByclas ...

  3. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  4. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  5. Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收

    执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...

  6. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  7. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  8. 《Web 前端面试指南》1、JavaScript 闭包深入浅出

    闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...

  9. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

随机推荐

  1. 搜索(BFS)---计算在网格中从原点到特定点的最短路径长度

    计算在网格中从原点到特定点的最短路径长度 [[1,1,0,1], [1,0,1,0], [1,1,1,1], [1,0,1,1]] 题目描述: 1表示可以经过某个地方,求解从(0,0)位置到(tr,t ...

  2. mysql中,表与表之间的关系

     """ 1.字段的修改.添加.删除 2.多表关系(外键) 3.单表详细操作:增删改,查(各种条件) """ 字段操作  create ta ...

  3. openstack stein部署手册 10. horzion

    # 安装程序包 yum install -y openstack-dashboard # 变更配置文件 /etc/openstack-dashboard/local_settings 变更以下 OPE ...

  4. 在centOS7.2上编译gcc4.4.7

    1.前置 首先,可以参考我的上篇文章,在centOS7.2上编译gcc4.1.2,过程基本一致,这里只对可能遇到的错误情况进行说明. 2.安装texinfo4.8 我的centos7.2版本,自带的是 ...

  5. Linux性能优化从入门到实战:01 Linux性能优化学习路线

      我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等.   把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯 ...

  6. Pillow6 起步

    使用 Image 类 可以使用 Image 模块的 open() 方法加载图片文件: from PIL import Image im = Image.open("hopper.ppm&qu ...

  7. 05XML

    1.XML入门 1.1 引入 HTML, 超文本标记语言. html语言语法是很松散的! 1)标签不区分大小写的! 2)标签可以不匹配的. 由w3c组织,针对html的语法缺陷,去设计了另一门,叫xm ...

  8. Oracle 数字转为字符串 to_char()

    格式:TO_CHAR(number,'format_model') 9 -->Represents a number 0 --> Forces a zero to be displayed ...

  9. JavaWeb(四):JDBC

    数据持久化(persistence) 把数据保存到可掉电式存储设备中以供之后使用. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各 ...

  10. Linux安装mysql5.6.33

    1.下载mysql安装包: 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6.33,通用版,lin ...