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 相关文章推荐
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
jquery入门—访问DOM对象方法
Jan 07 Javascript
让复选框只能选择一项的方法
Oct 08 Javascript
jquery实现预览提交的表单代码分享
May 21 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
理解Angular数据双向绑定
Jan 10 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
js转换对象为xml
Feb 17 Javascript
javascript实现动态显示颜色块的报表效果
Apr 10 Javascript
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
vue中如何去掉空格的方法实现
Nov 09 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
May 27 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出错界面
2006/10/09 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
Aster vs KG BO3 第一场2.18
2021/03/10 DOTA
最佳JS代码编写的14条技巧
2011/01/09 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
Prototype框架详解
2015/11/25 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
2017/01/19 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
python操作CouchDB的方法
2014/10/08 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python mysql断开重连的实现方法
2019/07/26 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
毕业生优秀推荐信
2013/11/26 职场文书
在校硕士自我鉴定
2014/01/23 职场文书
中学生自我评价范文
2014/02/08 职场文书
小学语文教学反思
2014/02/10 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
生日宴会祝酒词
2015/08/10 职场文书