用js 创建 简单查找 删除 二叉树
- <!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 创建 简单查找 删除 二叉树的更多相关文章
- node.js创建简单服务测试请求数据
工具:安装node: 1,创建文件夹 server, 2 ,在server文件夹下分别创建server.js 和 package.json 文件 3,server.js 代码: var express ...
- js 创建简单的表单同步验证器
SyncValidate declare const uni: any; export interface SyncValidateOpt { [key: string]: SyncValidateF ...
- 创建node.js一个简单的应用实例
在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
- JS创建类的方法--简单易懂有实例
版权声明:本文为博主原创文章,转载请注明出处 Javascript是一种基于对象的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有Class. ...
- JS中的DOM操作怎样添加、移除、移动、复制、创建和查找节点
DOM操作怎样添加.移除.移动.复制.创建和查找节点? (1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元 ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- 用Backbone.js创建一个联系人管理系统(五)
原文: Build a Contacts Manager Using Backbone.js: Part 5 这是这系列教程最后一部分了. 之前所有的增删改都在前端完成. 这部分我们要把Contact ...
- 使用three.js创建3D机房模型-分享一
序:前段时间公司一次研讨会上,一市场部同事展现了同行业其他公司的3D机房,我司领导觉得这个可以研究研究,为了节约成本,我们在网上大量检索,最后找到一位前辈的博文[TWaver的技术博客],在那篇博文的 ...
- django初探-创建简单的博客系统(二)
上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...
随机推荐
- Java泛型四:Java泛型总结
原文地址https://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 publ ...
- python16_day10【SelectWeb、SelectWget、paramiko、pymysql】
一.select实现Web框架(自定义WEB框架) 浏览器输入:http://127.0.0.1:8888/index.html import select import socket class F ...
- LeetCode:课程表【207】
LeetCode:课程表[207] 题目描述 现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹 ...
- vue-cli的utils.js文件详解
转载自:http://www.cnblogs.com/ye-hcj/p/7078047.html utils.js文件 // 引入nodejs路径模块var path = require('path' ...
- 经典iOS第三方库源码分析 - YYModel
YYModel介绍 YYModel是一个针对iOS/OSX平台的高性能的Model解析库,是属于YYKit的一个组件,创建是ibireme. 其实在YYModel出现之前,已经有非常多的Model解析 ...
- linux命令(6/9):watch命令
watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...
- sq 如何创建全局的临时表。
全局临时表的生命周期一直持续到创建会话(不是创建级别)才终止.例如,如果你在存储过程中创建全局临时表,当超出存储过程的范围时,该表并不会被销毁.当创建会话终止后,SQL Server才会自动尝试删除该 ...
- CSS 一个完整的例子
My first web page What this is A simple page put together using HTML. I said a simple page put toget ...
- 20145235李涛《网络对抗》Exp6 信息搜集与漏洞扫描
基础问答 那些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理.全球根域名服务器:绝大多数在欧洲和北美(全球13台,用A~M ...
- 深入理解JVM3
VM运行时数据区域 JVM执行Java程序的过程中,会使用到各种数据区域,这些区域有各自的用途.创建和销毁时间.根据<Java虚拟机规范(第二版)>的规定,JVM包括下列几个运行时数据区域 ...