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中对表单的基本操作代码
Jul 29 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
Jan 30 Javascript
js 鼠标移动显示图片的简单实例
Dec 25 Javascript
js登录弹出层特效
Mar 07 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
JavaScript分析、压缩工具JavaScript Analyser
Dec 31 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
Jul 11 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
vue params、query传参使用详解
Sep 12 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
Apr 21 Javascript
vue.js中导出Excel表格的案例分析
Jun 11 Javascript
微信小程序实现批量倒计时功能
Nov 01 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脚本的10个技巧(2)
2006/10/09 PHP
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
做网页的一些技巧
2007/02/01 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
对vue中methods互相调用的方法详解
2018/08/30 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
JS数组方法concat()用法实例分析
2020/01/18 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
pandas 对每一列数据进行标准化的方法
2018/06/09 Python
django缓存配置的几种方法详解
2018/07/16 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
实习教师自我鉴定
2013/12/12 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
营销团队口号
2014/06/06 职场文书
2014年组织部工作总结
2014/11/14 职场文书
公务员考察材料范文
2014/12/23 职场文书
离婚民事起诉状
2015/08/03 职场文书
运动会200米广播稿
2015/08/19 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
总结几个非常实用的Python库
2021/06/26 Python
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电