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 相关文章推荐
jQuery对象与DOM对象之间的转换方法
Apr 15 Javascript
Javascript之旅 对象的原型链之由来
Aug 25 Javascript
Jquery中offset()和position()的区别分析
Feb 05 Javascript
JavaScript中函数(Function)的apply与call理解
Jul 08 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
JavaScript简单实现弹出拖拽窗口(二)
Jun 17 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
关于jquery form表单序列化的注意事项详解
Aug 01 jQuery
简单实现节流函数和防抖函数过程解析
Oct 08 Javascript
Nuxt.js 静态资源和打包的操作
Nov 06 Javascript
vue+iview实现分页及查询功能
Nov 17 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
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脚本数据库功能详解(下)
2006/10/09 PHP
php.ini 中文版
2006/10/28 PHP
第十二节--类的自动加载
2006/11/16 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
js实现select组件的选择输入过滤代码
2014/10/14 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
通用求职信范文模板分享
2013/12/27 职场文书
会议接待欢迎词
2014/01/12 职场文书
初中体育教学反思
2014/01/14 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
安全员岗位职责范本
2015/04/11 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2016入党培训心得体会范文
2016/01/08 职场文书
四年级数学教学反思
2016/02/16 职场文书
MySQL表字段数量限制及行大小限制详情
2022/07/23 MySQL