1. <!DOCTYPE html>
  2. <html>
  3. <body>
  4. <canvas id="myCanvas" width="2000" height="1000"
  5. style="border:1px solid #c3c3c3;">
  6. Your browser does not support the HTML5 canvas tag.
  7. </canvas>
  8.  
  9. <img id='a'/>
  10. <script type="text/javascript">
  11.  
  12. //基本二叉树的实现
  13. function BT(){
  14.  
  15. this.root=null;
  16.  
  17. //首先 弄一个 节点类, 生成树节点
  18. this.Node=function(e){
  19. this.value=e;
  20. this.left=null;
  21. this.right=null;
  22. }
  23.  
  24. //添加元素 , 添加元素的位置和 添加顺序是有关的, 先添加的先成为上级树枝, 后面来的只能往下面塞了
  25. this.insert=function(e){
  26.  
  27. e = new this.Node(e);
  28.  
  29. if(this.root==null){
  30.  
  31. this.root=e;
  32.  
  33. }else{
  34.  
  35. //从根节点开始 对比 新节点 查找
  36. TEM = this.root;
  37.  
  38. recursiveAdd( TEM, e );
  39. }
  40.  
  41. /**
  42. 二叉树 左叶子的值需要比 根节点的值小, 右边比根节点大
  43. **/
  44. function recursiveAdd(tem,e){
  45.  
  46. //比较现有树根 和 新根 的值
  47. if(e.value < tem.value){
  48.  
  49. //没有
  50. if(tem.left==null){
  51. tem.left=e;
  52.  
  53. }else{
         //移动指针, 从跟节点 到 左节点,
  54. tem=tem.left;
  55.  
  56. return recursiveAdd(tem,e);
  57. }
  58. }else{
  59. if(tem.right==null){
  60.  
  61. tem.right=e;
  62.  
  63. }else{
  64.  
  65. tem=tem.right;
  66.  
  67. return recursiveAdd(tem,e);
  68.  
  69. }
  70.  
  71. }
  72. }
  73.  
  74. return this.root;
  75. }
  76.  
  77. //**************************************** 查找元素
  78. this.find=function(e){
  79.  
  80. function recursiveFind(tem,e){
  81.  
  82. if(tem.value==e.value){
  83.  
  84. console.log(tem);
  85.  
  86. return tem;
  87.  
  88. }else{
  89.  
  90. if(e.value<tem.value){
  91. tem=tem.left;
  92.  
  93. recursiveFind(tem,e)
  94.  
  95. }else{
  96.  
  97. if(e.value>tem.value){
  98.  
  99. tem=tem.right;
  100.  
  101. recursiveFind(tem,e)
  102.  
  103. }
  104.  
  105. }
  106.  
  107. }
  108. }
  109.  
  110. e=new this.Node(e);
  111.  
  112. if(this.root==null){
  113.  
  114. return;
  115.  
  116. }else{
  117.  
  118. TEM=this.root;
  119.  
  120. recursiveFind(TEM,e);
  121.  
  122. }
  123.  
  124. }
  125.  
  126. //删除元素
  127. this.delete=function(e){
  128.  
  129. e=new this.Node(e);
  130.  
  131. if(this.root==e){
  132. this.root=null;
  133.  
  134. }else{
  135.  
  136. TEM=this.root;
  137.  
  138. recursiveDelete(TEM,e);
  139. }
  140.  
  141. function recursiveDelete(tem,e){
  142.  
  143. if(e.value<tem.value){
  144.  
  145. if(tem.left==null){
  146.  
  147. return;
  148.  
  149. }else{
  150. if(tem.left.value==e.value){
  151.  
  152. tem.left=null;
  153. return;
  154.  
  155. }else{
  156.  
  157. tem=tem.left;
  158.  
  159. recursiveDelete(tem,e)
  160. }
  161.  
  162. }
  163. }else{
  164.  
  165. if(e.value>tem.value){
  166.  
  167. if(tem.right==null){
  168. return;
  169.  
  170. }else{
  171.  
  172. if(tem.right.value==e.value){
  173. //删除了这个 跟 下的所有 节点, 就像 砍掉了一颗树枝
  174. tem.right=null;
  175. return;
  176.  
  177. }else{
  178.  
  179. tem=tem.right;
  180. recursiveDelete(tem,e)
  181.  
  182. }
  183. }
  184.  
  185. }
  186. }
  187. }
  188.  
  189. }
  190. }
  191.  
  192. var obj = new BT();
  193.  
  194. console.time('insertTest');
  195.  
  196. obj.insert(55);
  197. obj.insert(44);
  198. obj.insert(33);
  199. obj.insert(22);
  200. obj.insert(66);
  201.  
  202. obj.insert(77);
  203. obj.insert(88);
  204. obj.insert(60);
  205. obj.insert(58);
  206. obj.insert(63);
  207. obj.insert(57);
  208. obj.insert(56);
  209. obj.insert(23);
  210.  
  211. console.dir( obj )
  212.  
  213. console.timeEnd('insertTest');
  214.  
  215. console.time('findTest');
  216. obj.find(63);
  217. console.timeEnd('findTest');
  218.  
  219. console.time('deleteTest');
  220. obj.delete(57);
  221. console.timeEnd('deleteTest');
  222.  
  223. </script>
  224. </body>
  225. </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. Java泛型四:Java泛型总结

    原文地址https://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 publ ...

  2. python16_day10【SelectWeb、SelectWget、paramiko、pymysql】

    一.select实现Web框架(自定义WEB框架) 浏览器输入:http://127.0.0.1:8888/index.html import select import socket class F ...

  3. LeetCode:课程表【207】

    LeetCode:课程表[207] 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹 ...

  4. vue-cli的utils.js文件详解

    转载自:http://www.cnblogs.com/ye-hcj/p/7078047.html utils.js文件 // 引入nodejs路径模块var path = require('path' ...

  5. 经典iOS第三方库源码分析 - YYModel

    YYModel介绍 YYModel是一个针对iOS/OSX平台的高性能的Model解析库,是属于YYKit的一个组件,创建是ibireme. 其实在YYModel出现之前,已经有非常多的Model解析 ...

  6. linux命令(6/9):watch命令

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  7. sq 如何创建全局的临时表。

    全局临时表的生命周期一直持续到创建会话(不是创建级别)才终止.例如,如果你在存储过程中创建全局临时表,当超出存储过程的范围时,该表并不会被销毁.当创建会话终止后,SQL Server才会自动尝试删除该 ...

  8. CSS 一个完整的例子

    My first web page What this is A simple page put together using HTML. I said a simple page put toget ...

  9. 20145235李涛《网络对抗》Exp6 信息搜集与漏洞扫描

    基础问答 那些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理.全球根域名服务器:绝大多数在欧洲和北美(全球13台,用A~M ...

  10. 深入理解JVM3

    VM运行时数据区域 JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途.创建和销毁时间.根据<Java虚拟机规范(第二版)>的规定,JVM包括下列几个运行时数据区域 ...