<!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. day3-python的函数及参数

    函数式编程最重要的是增强代码的重用性和可读性 1 2 3 4 def 函数名(参数):     ...     函数体     ... 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函 ...

  2. DELPHI在标题栏上增加按钮

    Delphi代码 unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Contr ...

  3. 『NiFi 学习之路』资源 —— 资料汇总

    一.概述 由于 NiFi 是一个比较新的开源项目,国内的相关资料少之又少. 加之,大家都知道,国内的那么些个教程,原创都只是停留在初级使用阶段,没有更多深入的介绍. 再者,其余的文章不是东抄抄就是西抄 ...

  4. python处理时间相关的方法

    记录python处理时间的模块:time模块.datetime模块和calendar模块. python版本:2.7 https://blog.csdn.net/songfreeman/article ...

  5. Apache 配置参数

    参数说明 1.Global Environment 全局环境配置,决定Apache服务器的全局参数3.Virtual Hosts—虚拟主机,虚拟主机不能与Main Server主服务器共存,当启用了虚 ...

  6. 20145222黄亚奇《网络对抗》- shellcode注入&Return-to-libc攻击深入

    20145222黄亚奇<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode注入实践过程

  7. [BZOJ1257]余数之和

    Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k mod i表示k除以i的余数. 例如j(5 ...

  8. 记一次如何解决低版本jar包里面的bug,不适宜替换成高版本的经历

    背景:目前正在迭代开发的项目,应用户要求新增一个电子文档转换的功能,即将不标准的excel文件转换为标准的excel文件(标准模板). 选择:pio ,本项目里面本来就有poi的jar包 问题:项目里 ...

  9. Spring中<ref local=""/>与<ref bean=""/>区别

    小 Spring中<ref local=""/>与<ref bean=""/>区别 (2011-03-19 19:21:58) 转载▼ ...

  10. 你知道uwsgi???

    第一步,打开https://www.google.com.hk 第二步,输入how to restart uwsgi