<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="2000" height="1000"
style="border:1px solid #c3c3c3;">
Your browser does not support the HTML5 canvas tag.
</canvas> <img id='a'/>
<script type="text/javascript"> //基本二叉树的实现
function BT(){ this.root=null; //首先 弄一个 节点类, 生成树节点
this.Node=function(e){
this.value=e;
this.left=null;
this.right=null;
} //添加元素 , 添加元素的位置和 添加顺序是有关的, 先添加的先成为上级树枝, 后面来的只能往下面塞了
this.insert=function(e){ e = new this.Node(e); if(this.root==null){ this.root=e; }else{ //从根节点开始 对比 新节点 查找
TEM = this.root; recursiveAdd( TEM, e );
} /**
二叉树 左叶子的值需要比 根节点的值小, 右边比根节点大
**/
function recursiveAdd(tem,e){ //比较现有树根 和 新根 的值
if(e.value < tem.value){ //没有
if(tem.left==null){
tem.left=e; }else{
     //移动指针, 从跟节点 到 左节点,
tem=tem.left; return recursiveAdd(tem,e);
}
}else{
if(tem.right==null){ tem.right=e; }else{ tem=tem.right; return recursiveAdd(tem,e); } }
} return this.root;
} //**************************************** 查找元素
this.find=function(e){ function recursiveFind(tem,e){ if(tem.value==e.value){ console.log(tem); return tem; }else{ if(e.value<tem.value){
tem=tem.left; recursiveFind(tem,e) }else{ if(e.value>tem.value){ tem=tem.right; recursiveFind(tem,e) } } }
} e=new this.Node(e); if(this.root==null){ return; }else{ TEM=this.root; recursiveFind(TEM,e); } } //删除元素
this.delete=function(e){ e=new this.Node(e); if(this.root==e){
this.root=null; }else{ TEM=this.root; recursiveDelete(TEM,e);
} function recursiveDelete(tem,e){ if(e.value<tem.value){ if(tem.left==null){ return; }else{
if(tem.left.value==e.value){ tem.left=null;
return; }else{ tem=tem.left; recursiveDelete(tem,e)
} }
}else{ if(e.value>tem.value){ if(tem.right==null){
return; }else{ if(tem.right.value==e.value){
//删除了这个 跟 下的所有 节点, 就像 砍掉了一颗树枝
tem.right=null;
return; }else{ tem=tem.right;
recursiveDelete(tem,e) }
} }
}
} }
} var obj = new BT(); console.time('insertTest'); obj.insert(55);
obj.insert(44);
obj.insert(33);
obj.insert(22);
obj.insert(66); obj.insert(77);
obj.insert(88);
obj.insert(60);
obj.insert(58);
obj.insert(63);
obj.insert(57);
obj.insert(56);
obj.insert(23); console.dir( obj ) console.timeEnd('insertTest'); console.time('findTest');
obj.find(63);
console.timeEnd('findTest'); console.time('deleteTest');
obj.delete(57);
console.timeEnd('deleteTest'); </script>
</body>
</html>

用js 创建  简单查找 删除 二叉树的更多相关文章

  1. node.js创建简单服务测试请求数据

    工具:安装node: 1,创建文件夹 server, 2 ,在server文件夹下分别创建server.js 和 package.json 文件 3,server.js 代码: var express ...

  2. js 创建简单的表单同步验证器

    SyncValidate declare const uni: any; export interface SyncValidateOpt { [key: string]: SyncValidateF ...

  3. 创建node.js一个简单的应用实例

    在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...

  4. 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝

    第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...

  5. JS创建类的方法--简单易懂有实例

    版权声明:本文为博主原创文章,转载请注明出处 Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有Class. ...

  6. JS中的DOM操作怎样添加、移除、移动、复制、创建和查找节点

    DOM操作怎样添加.移除.移动.复制.创建和查找节点? (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元 ...

  7. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  8. 用Backbone.js创建一个联系人管理系统(五)

    原文: Build a Contacts Manager Using Backbone.js: Part 5 这是这系列教程最后一部分了. 之前所有的增删改都在前端完成. 这部分我们要把Contact ...

  9. 使用three.js创建3D机房模型-分享一

    序:前段时间公司一次研讨会上,一市场部同事展现了同行业其他公司的3D机房,我司领导觉得这个可以研究研究,为了节约成本,我们在网上大量检索,最后找到一位前辈的博文[TWaver的技术博客],在那篇博文的 ...

  10. django初探-创建简单的博客系统(二)

    上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...

随机推荐

  1. 吴超老师课程--Hbase Shell

    hbase提供了一个shell的终端给用户交互 名称 命令表达式 创建表 create '表名称', '列族名称1','列族名称2','列族名称N' 添加记录 put '表名称', '行名称', '列 ...

  2. BOM对象,math对象document对象的属性和操作和 事件的基本操作

    Math对象 //该对象中的属性方法 和数学有关. abs(x) 返回数的绝对值. exp(x) 返回 e 的指数. floor(x) 对数进行下舍入. log(x) 返回数的自然对数(底为e). m ...

  3. PySpider HTTP 599: SSL certificate problem错误的解决方法(转)

    前言 最近发现许多小伙伴在用 PySpider 爬取 https 开头的网站的时候遇到了 HTTP 599: SSL certificate problem: self signed certific ...

  4. powerdesign初级入门教程

    首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDesigner快速的创建出这个数据库吧. 1. ...

  5. Django- 反向生成url

    Django中提供了一个关于URL的映射的解决方案, 1.客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示 2. ...

  6. MySQL数据库表分区功能详解

    1.什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表 ...

  7. JVM调优总结(一)

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  8. HDU 1337 && POJ 1218&& zju 1350 方法总结

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1337 杭电 http://poj.org/problem?id=1218清华 http://acm.zj ...

  9. angularjs Dom方式访问疑似可以访问ifame结构项目

    一.定位需要访问控制器元素 var currObj = document.querySelector('[ng-controller="munuListCtrl"]'); 或者 v ...

  10. Spring中的@Transactional以及事务的详细介绍

    首先来说下事务,说到事务就不得不说它的四个特性(acid): 一.特性 1.原子性(atomicity):一个事务当作为一个不可分割的最小工作单元,一组操作要么全部成功,要么全部失败. 2.一致性(c ...