<!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. go——接口

    Go语言提供了另外一种数据类型,即接口,它把所有具有共性的方法定义在一起,任何其它类型只要实现了这些方法就是实现了这个接口. 接口代表一种调用契约,是多个方法声明的集合.在某些动态语言里,接口(int ...

  2. python全栈开发从入门到放弃之网络基础

    一.操作系统基础 操作系统:(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才 ...

  3. MAC 终端terminal颜色

    Mac终端terminal颜色实在太单调了,安装Linux使用的GNU Coreutils替换Mac的ls命令: Mac终端terminal颜色实在太单调了,安装Linux使用的GNU Coreuti ...

  4. caffe训练自己的数据集

    默认caffe已经编译好了,并且编译好了pycaffe 1 数据准备 首先准备训练和测试数据集,这里准备两类数据,分别放在文件夹0和文件夹1中(之所以使用0和1命名数据类别,是因为方便标注数据类别,直 ...

  5. java 偏向锁怎么升级为轻量级锁

    因为偏向锁,锁住对象时,会写入对象头相应的标识,我们先把对象头(官方叫法为:Mark Word)的图示如下(借用了网友的图片): 通过上面的图片,我们可以知道,对象处于偏向锁时,mark word中的 ...

  6. mysql 系列文章推荐

    1. mysql日志详细解析     http://www.cnblogs.com/wangkongming/p/3684950.html 2. mysql 主从同步实验     http://pmg ...

  7. Python3.x:pip install pymssql安装时出错

    Python3.x:pip install pymssql安装时出错 一.错误日志 error: Microsoft Visual C++ 14.0 is required. Get it with ...

  8. JMeter接口测试和压力测试

    JMeter接口测试和压力测试 JMeter可以做接口测试和压力测试.其中接口测试的简单操作包括做http脚本(发get/post请求.加cookie.加header.加权限认证.上传文件).做web ...

  9. c# 布局(stackpanel)

    <Grid> <StackPanel> <Button Content="asas"> </Button> <Button C ...

  10. 20145217《网络对抗》 Web安全基础实践

    20145217<网络对抗> Web安全基础实践 一.实践任务 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 二.实验后回答问题 (1)SQL注入攻击原理,如 ...