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 相关文章推荐
静态页面的值传递(三部曲)
Sep 25 Javascript
js event事件的传递与冒泡处理
Dec 06 Javascript
关于jquery css的使用介绍
Apr 18 Javascript
jquery ui dialog实现弹窗特效的思路及代码
Aug 03 Javascript
javascript打印输出json实例
Nov 11 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
May 26 Javascript
微信小程序实现添加手机联系人功能示例
Nov 30 Javascript
jquery radio 动态控制选中失效问题的解决方法
Feb 28 jQuery
jQuery实现使用sort方法对json数据排序的方法
Apr 17 jQuery
Vuex的初探与实战小结
Nov 26 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
Nov 28 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
Nov 13 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
什么是短波收听SWL
2021/03/01 无线电
php zip文件解压类代码
2009/12/02 PHP
php 缩略图实现函数代码
2011/06/23 PHP
php 中英文语言转换类代码
2011/08/11 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
JS的数组迭代方法
2015/02/05 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
node(koa2) web应用模块介绍详解
2019/03/29 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
通过C++学习Python
2015/01/20 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python类定义和类继承详解
2015/05/08 Python
Python引用模块和查找模块路径
2016/03/17 Python
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
virtualenv介绍及简明教程
2020/06/23 Python
Python wordcloud库安装方法总结
2020/12/31 Python
企业总经理职责
2014/02/02 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
党风廉政建设个人总结
2015/03/06 职场文书
2015大学生求职信范文
2015/03/20 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
队名及霸气口号大全
2015/12/25 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
《没有任何借口》读后感:完美的执行能力
2020/01/07 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
goland 清除所有的默认设置操作
2021/04/28 Golang
MySQL事务操作的四大特性以及并发事务问题
2022/04/12 MySQL