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模拟的QQ面板上的多级可展开的菜单
Oct 10 Javascript
jquery解决图片路径不存在执行替换路径
Feb 06 Javascript
完善的jquery处理机制
Feb 21 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
一个例子轻松学会Vue.js
Jan 02 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
从源码角度来回答keep-alive组件的缓存原理
Jan 18 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 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
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
超级兔子让浮动层消失的前因后果
2007/03/09 Javascript
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
JQuery live函数
2010/12/24 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
jQuery中setTimeout的几种使用方法小结
2013/04/07 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[17:36]VG战队纪录片
2014/08/21 DOTA
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python中的map、reduce和filter浅析
2014/04/26 Python
python在不同层级目录import模块的方法
2016/01/31 Python
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
Servlet的生命周期
2013/08/25 面试题
职业培训师职业生涯规划
2014/02/18 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
离职报告格式
2014/11/04 职场文书
党员个人总结范文
2015/02/14 职场文书
JS实现扫雷项目总结
2021/05/19 Javascript
图文详解nginx日志切割的实现
2022/01/18 Servers
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js