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 相关文章推荐
JavaScript入门教程(7) History历史对象
Jan 31 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
Feb 23 Javascript
JavaScript等比例缩放图片控制超出范围的图片
Aug 06 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
Jan 09 Javascript
js截取中英文字符串、标点符号无乱码示例解读
Apr 17 Javascript
点击标签切换和自动切换DIV选项卡
Aug 10 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
Feb 28 Javascript
JS 组件系列之BootstrapTable的treegrid功能
Jun 16 Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
解析php中反射的应用
2013/06/18 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
python中for用来遍历range函数的方法
2018/06/08 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python调用摄像头拍摄数据集
2019/06/01 Python
python如何删除文件中重复的字段
2019/07/16 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
销售员自我评价怎么写
2013/09/19 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
夫妻婚内购房协议书
2014/10/05 职场文书
优秀团员自我评价
2015/03/10 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
教你怎么用Python监控愉客行车程
2021/04/29 Python
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python