<!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. myeclipse如何删除自带Javaee里面jar包

    myeclipse是我们在使用Java开发时的一款不错的集成开发环境软件,一般在开发web项目的时候,都要引入相关的jar包,javaee包就是其中一个,有时候其里面的jar包可能与我们需要的不匹配, ...

  2. [设计模式]State模式

    <Java与模式> 又称状态对象模式.状态模式是对象的行为模式.GOF95 一个对象的行为取决于一个或者多个动态变化的属性,这样的属性叫做状态.这样的对象叫做有状态的对象(stateful ...

  3. 华为大数据项目fusionInsight

    项目简述:基于开源Hadoop2.0架构的集群网络,进行海量数据的分布式计算.由于Hadoop集群规模不断扩大,而搭建一个同等规模的测试集群需要一笔昂贵的开销.目前有100台左右物料,期望预测计算节点 ...

  4. Kattis - honey【DP】

    Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...

  5. canvas笔记1

    w3c定义: <canvas> 标签定义图形,比如图表和其他图像. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形. canvas 对象 属性: width he ...

  6. linux命令(6/11)--修改文件的用户组chgrp和文件所有者chown

    在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...

  7. CSS 边距和填充

    margin and padding are the two most commonly used properties for spacing-out elements. A margin is t ...

  8. HTML5/CSS3图片左右切换弹性动画

    在线演示 本地下载

  9. Boostnote:适合程序员的笔记软件【转】

    本文转载自:https://blog.csdn.net/u013553529/article/details/70306899 Boostnote:适合程序员的笔记软件 注意: Boostnote正在 ...

  10. 深入理解JVM 垃圾收集器(下)G1收集器

    1.回顾CMS 1.1堆内存结构 1.2新生代GC 1.3老年代GC 2.G1收集器 2.1G1实现概览及使用场景 G1的推荐使用场景 2.2GC 2.2.1新生代GC 2.2.2老年代GC 老年代G ...