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 相关文章推荐
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
Apr 20 Javascript
jquery select(列表)的操作(取值/赋值)
Aug 06 Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
Js nodeType 属性全面解析
Nov 14 Javascript
封装好的js判断操作系统与浏览器代码分享
Jan 09 Javascript
javascript正则表达式之分组概念与用法实例
Jun 16 Javascript
Angular 常用指令实例总结整理
Dec 13 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
200行HTML+JavaScript实现年会抽奖程序
Jan 22 Javascript
JavaScript中的this妙用实例分析
May 09 Javascript
微信小程序实现弹框效果
May 26 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
JavaScript面向对象编程
2008/03/02 Javascript
js控制框架刷新
2008/08/01 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
jquery 实现表单验证功能代码(简洁)
2012/07/03 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
require.js中的define函数详解
2017/07/10 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
javascript中UMD规范的代码推演
2018/08/29 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
python中的错误处理
2016/04/10 Python
深入浅析Python中的yield关键字
2018/01/24 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python变量访问权限控制详解
2019/06/29 Python
python 两个数据库postgresql对比
2019/10/21 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
判断单链表中是否存在环
2012/07/16 面试题
保护环境倡议书
2014/04/14 职场文书
应聘护士求职信
2014/07/21 职场文书
小学家长学校培训材料
2014/08/24 职场文书
2015年教育实习工作总结
2015/04/24 职场文书
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python