JavaScript数据结构与算法之二叉树添加/删除节点操作示例


Posted in Javascript onMarch 01, 2019

本文实例讲述了JavaScript数据结构与算法之二叉树添加/删除节点操作。分享给大家供大家参考,具体如下:

function Node(data,left,right) {
  this.data = data;
  this.left = left;
  this.right = right;
  this.show = show;
}
function show() {
  return this.data;
}
function BST() {
  this.root = null;
  this.insert = insert;
  this.inOrder = inOrder;
  this.getMin = getMin;
  this.getMax = getMax;
  this.find = find;
  this.remove = remove;
}
function insert(data) {
  var n = new Node(data,null,null);
  if(this.root == null) {
    this.root = n;
  }else {
    var current = this.root;
    var parent;
    while(current) {
      parent = current;
      if(data < current.data) {
        current = current.left;
        if(current == null) {
          parent.left = n;
          break;
        }
      }else {
        current = current.right;
        if(current == null) {
          parent.right = n;
          break;
        }
      }
    }
  }
}
// 中序遍历
function inOrder(node) {
  if(!(node == null)) {
    inOrder(node.left);
    console.log(node.show());
    inOrder(node.right);
  }
}
// 先序遍历 
function preOrder(node) {
  if(!(node == null)) {
    console.log(node.show());
    preOrder(node.left);
    preOrder(node.right);
  }
}
// 后序遍历
function postOrder(node) {
  if(!(node == null)) {
    postOrder(node.left);
    postOrder(node.right);
    console.log("后序遍历"+node.show());
  }
}
// 二叉树查找最小值
function getMin(){
  var current = this.root;
  while(!(current.left == null)) {
    current = current.left;
  }
  return current.data;
}
// 二叉树上查找最大值
function getMax() {
  var current = this.root;
  while(!(current.right == null)) {
    current = current.right;
  }
  return current.data;
}
// 查找给定值
function find(data) {
  var current = this.root;
  while(current != null) {
    if(current.data == data) {
      return current;
    }else if(data < current.data) {
      current = current.left;
    }else {
      current = current.right;
    }
  }
  return null;
}
function remove(data) {
  root = removeNode(this.root,data);
}
function getSmallest(node) {
  if (node.left == null) {
   return node;
  }
  else {
   return getSmallest(node.left);
  }
}
function removeNode(node,data) {
  if(node == null) {
    return null;
  }
  if(data == node.data) {
    // 没有子节点的节点
    if(node.left == null && node.right == null) {
      return null;
    } 
    // 没有左子节点的节点
    if(node.left == null) {
      return node.right;
    }
    // 没有右子节点的节点
    if(node.right == null) {
      return node.left;
    }
    // 有2个子节点的节点
    var tempNode = getSmallest(node.right);
    node.data = tempNode.data;
    node.right = removeNode(node.right,tempNode.data);
    return node;
  }else if(data < node.data) {
    node.left = removeNode(node.left,data);
    return node;
  }else {
    node.right = removeNode(node.right,data);
    return node;
  }
}
//代码初始化如下:
var nums = new BST();
nums.insert(23);
nums.insert(45);
nums.insert(16);
nums.insert(37);
nums.insert(3);
nums.insert(99);
nums.insert(22);
var min = nums.getMin();
console.log(min);
var max = nums.getMax();
console.log(max);
var value = nums.find("45");
console.log(value);
nums.remove(23);

运行结果:

JavaScript数据结构与算法之二叉树添加/删除节点操作示例

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQueryUI写一个调整分类的拖放效果实现代码
May 10 Javascript
手机平板等移动端适配跳转URL的js代码
Jan 25 Javascript
jquery 获取dom固定元素 添加样式的简单实例
Feb 04 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
对JavaScript客户端应用编程的一些建议
Jun 24 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
Nov 03 Javascript
第七章之菜单按钮图标组件
Apr 25 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
Sep 19 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
理解Koa2中的async&amp;await的用法
Feb 05 Javascript
开发用到的js封装方法(20种)
Oct 12 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 #Javascript
Angular7.2.7路由使用初体验
Mar 01 #Javascript
vuex实现及简略解析(小结)
Mar 01 #Javascript
简单两步使用node发送qq邮件的方法
Mar 01 #Javascript
Vue实现类似Spring官网图片滑动效果方法
Mar 01 #Javascript
[原创]微信小程序获取网络类型的方法示例
Mar 01 #Javascript
使用JavaScript解析URL的方法示例
Mar 01 #Javascript
You might like
php之字符串变相相减的代码
2007/03/19 PHP
php 阴历-农历-转换类代码
2012/01/16 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
2017/06/02 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
Python多项式回归的实现方法
2019/03/11 Python
对Python中画图时候的线类型详解
2019/07/07 Python
python3获取url文件大小示例代码
2019/09/18 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
写给妈妈的道歉信
2014/01/11 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
大学生求职信怎么写
2015/03/19 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
小学四年级班务总结该怎么写?
2019/08/16 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers