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 相关文章推荐
iframe 自适应高度[在IE6 IE7 FF下测试通过]
Apr 13 Javascript
jQuery UI Autocomplete 体验分享
Feb 14 Javascript
jQuery实现模拟marquee标签效果
Jul 14 Javascript
解决js图片加载时出现404的问题
Nov 30 Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
Angular2自定义分页组件
Apr 19 Javascript
利用pm2部署多个node.js项目的配置教程
Oct 22 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
Koa项目搭建过程详细记录
Apr 12 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 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原理之异常机制
2010/08/21 PHP
php数组删除元素示例
2014/03/21 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
pjblog修改技巧汇总
2007/03/12 Javascript
JavaScript 原型继承
2011/12/26 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
基于python绘制科赫雪花
2018/06/22 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
python使用epoll实现服务端的方法
2018/10/16 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python实现事件驱动
2018/11/21 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
Python pandas库中的isnull()详解
2019/12/26 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
有限责任公司股东合作协议书
2014/12/02 职场文书
汉字听写大会观后感
2015/06/12 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers