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过滤数组重复元素的方法
Sep 05 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
详解JS 比较两个Json对象的值是否相等的实例
Nov 20 Javascript
JavaScript中匿名函数用法实例
Mar 23 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
原生js实现弹出层登录拖拽功能
Dec 05 Javascript
手淘flexible.js框架使用和源代码讲解小结
Oct 15 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
Oct 26 Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 Javascript
Javascript节流函数throttle和防抖函数debounce
Dec 03 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中使用Oracle数据库(2)
2006/10/09 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php短信接口代码
2016/05/13 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
2014/06/20 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
基于JavaScript canvas绘制贝塞尔曲线
2018/12/25 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python模块之paramiko实例代码
2018/01/31 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
Python数据类型之Tuple元组实例详解
2019/05/08 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
采购部主管岗位职责
2014/01/01 职场文书
创建服务型党组织实施方案
2014/02/25 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
十佳党员事迹材料
2014/08/28 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
计算机教师工作总结
2015/08/13 职场文书