都是常用的功能。

删除是最复杂的。。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>test</title><script src="js/lib/angular.min.js"></script><script >function BinarySearchTree(){var Node = function(key){this.key = key;this.left = null;this.right = null;};var root = null;this.insert = function(key){var newNode = new Node(key);if (root === null) {root = newNode;} else {insertNode(root, newNode);}};var insertNode = function(node, newNode) {if (newNode.key < node.key) {if (node.left === null) {node.left = newNode;} else {insertNode(node.left, newNode);}}else{if (node.right == null) {node.right = newNode;} else {insertNode(node.right, newNode);}}};this.inOrderTraverse = function(callback) {inOrderTraverseNode(root, callback);};var inOrderTraverseNode = function(node, callback) {if (node !== null) {inOrderTraverseNode(node.left, callback);callback(node.key);inOrderTraverseNode(node.right, callback);}};this.preOrderTraverse = function(callback){preOrderTraverseNode(root, callback);};var preOrderTraverseNode = function (node, callback) {if (node !== null) {callback(node.key); //{1}preOrderTraverseNode(node.left, callback); //{2}preOrderTraverseNode(node.right, callback); //{3}
                        }};this.postOrderTraverse = function(callback){postOrderTraverseNode(root, callback);};var postOrderTraverseNode = function (node, callback) {if (node !== null) {postOrderTraverseNode(node.left, callback); //{1}postOrderTraverseNode(node.right, callback); //{2}callback(node.key); //{3}
                        }};this.min = function() {return minNode(root);};var minNode = function(node) {if (node) {while (node && node.left !== null) {node = node.left;}return node.key;}return null;};this.max = function() {return maxNode(root);};var maxNode = function (node) {if (node){while (node && node.right !== null) { //{5}node = node.right;}return node.key;}return null;};this.search = function(key) {return searchNode(root, key);};var searchNode = function(node, key) {if (node === null) {return false;}if (key < node.key) {return searchNode(node.left, key);} else if (key > node.key) {return searchNode(node.right, key);}else{return true;}};this.remove = function(key) {root = removeNode(root, key);};var removeNode = function(node, key){if (node === null){ //{2}return null;}if (key < node.key){ //{3}node.left = removeNode(node.left, key); //{4}return node; //{5}} else if (key > node.key){ //{6}node.right = removeNode(node.right, key); //{7}return node; //{8}} else { //键等于node.key//第一种情况——一个叶节点if (node.left === null && node.right === null){ //{9}node = null; //{10}return node; //{11}
                            }//第二种情况——一个只有一个子节点的节点if (node.left === null){ //{12}node = node.right; //{13}return node; //{14}} else if (node.right === null){ //{15}node = node.left; //{16}return node; //{17}
                            }//第三种情况——一个有两个子节点的节点var aux = findMinNode(node.right); //{18}node.key = aux.key; //{19}node.right = removeNode(node.right, aux.key); //{20}return node; //{21}
                        }};}function printNode(value) {console.log(value);}var tree = new BinarySearchTree();tree.insert(11);tree.insert(7);tree.insert(15);tree.insert(5);tree.insert(3);tree.insert(9);tree.insert(8);tree.insert(10);tree.insert(13);tree.insert(12);tree.insert(14);tree.insert(20);tree.insert(18);tree.insert(25);tree.insert(6);tree.inOrderTraverse(printNode);tree.preOrderTraverse(printNode);tree.postOrderTraverse(printNode);console.log(tree.min());console.log(tree.max());console.log(tree.search(1) ? 'Key 1 found.' : 'Key 1 not found.');console.log(tree.search(8) ? 'Key 8 found.' : 'Key 8 not found.');</script></head>
<body></body>
</html>

转载于:https://www.cnblogs.com/aguncn/p/5817760.html

javascript二叉树基本功能实现相关推荐

  1. Javascript的FSO功能

    Javascript的FSO功能 javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行 ...

  2. Javascript自定义事件功能与用法实例分析

    原文地址:https://www.jb51.net/article/127776.htm 本文实例讲述了javascript自定义事件功能与用法.分享给大家供大家参考,具体如下: 概述 自定义事件很难 ...

  3. 帮助你更好理解javascript中easing功能的网站 - Easings.net

    日期:2012-10-17  来源:GBin1.com 如果你开发过jQuery的动画效果的话,肯定接触过一个jQuery插件:jquery.easing plugin,这个插件可以帮助你生成不同类型 ...

  4. ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能(六)

    目的: 1.ArcGIS.Server.9.3和ArcGIS API for JavaScript实现Identify功能,鼠标点击后获取被点击对象的然后以infoWindow的方式显示点击对象的属性 ...

  5. 在Web中如何运用JavaScript实现打印功能

    <OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>< ...

  6. 非常不错的一款html5【404页面】,不含js脚本可以左右摆动,原生JavaScript实现日历功能代码实例(无引用Jq)...

    这篇文章主要介绍了原生JavaScript实现日历功能代码实例(无引用Jq),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 成品显示,可左右切换月份 ...

  7. Javascript中暂停功能的实现

    JavaScript实现暂停功能 <meta http-equiv="Content-Type" content="text/html; charset=utf-8 ...

  8. Javascript -- 二叉树(先序,中序,后序实现)

    树的遍历详解:Mr.J--树的遍历方式详解 Javascript实现二叉树:Javascript -- 二叉树实现 先序遍历的顺序:NLR(根节点->左结点->右结点) 中序遍历的顺序:L ...

  9. javascript核心_功能强大的JavaScript数组

    数组是JavaScript的内置类型,JavaScript数组的功能特别强大.下面简单介绍一下JavaScript数组. 1.JavaScript数组的核心功能点 JavaScript数组有如下的核心 ...

  10. VS 2008的JavaScript代码提示功能 (学习老赵视频的笔记)

    学习老赵的视频ASP.NET AJAX深入浅出系列课程(19):VS 2008的JavaScript代码提示功能(Level 200) 自己做的demo,记下来以便查阅!感谢赵老师! 原来js还可以像 ...

最新文章

  1. git保姆级入门(包含解决git仓库报错500的问题)
  2. 如何在Spring Boot中玩转智能合约【修订版】
  3. 超详细!百度富媒体检索比对系统的关键技术
  4. QML基础类型之georectangle
  5. ora-01113 oracle8i,ora-01113解决办法
  6. AI+建筑战略再升级 旷视AIoT产品家族合体首秀
  7. 响应式优化透明版表白网html单页源码
  8. 职称考试计算机怎么学容易,计算机职称考试备考的六个关键点
  9. java基础之多线程与Lambda表达式
  10. 脚踏实地才能仰望星空
  11. windows server 2008 r2集成USB3.0
  12. 云服务器抢票咋用_可以利用云服务器来抢票不?
  13. python 换行代码怎么写
  14. 网络通信学习笔记之 ———Socket网络通信
  15. 从法律角度看数据安全,数据销毁很重要
  16. FineBI 取日期的最大max、最小值min
  17. 支付宝的架构到底有多牛逼?
  18. crm 系统解决方案_如何将本地CRM组织的托管解决方案转换为非托管解决方案?...
  19. 优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信
  20. Adobe Flash CS4绿色版调试AS无法启动FlashPlayer.exe

热门文章

  1. LINUX下载编译FriBidi
  2. WINDOWS如何编写注册表文件
  3. Windows下实现gettimeofday()函数
  4. LINUX使用sed完成文本文件的修改
  5. 安卓双进程保活的代码
  6. 微型计算机基础知识提纲,自考“微型计算机应用基础”自考大纲(6)
  7. dataframe在最后新增一行_【TOOLS】python中对Excel进行写入操作,写入一列或者一行(openpyxl)...
  8. java 使用vue_简单使用vue-cli
  9. 网页怎么调用云服务器资源,如何将网页资源放到云服务器
  10. 时光邮局互助排单匹配系统软件开发