1.创建排序二叉树的构造函数

/**
* 创建排序二叉树的构造函数
* @param valArr 排序二叉树中节点的值
* @constructor
*/
function BinaryTree(valArr) {
function Node(val) {
this.value = val;
this.left = null;
this.right = null;
}
var root = null;
valArr.forEach(function (val) {
var newNode = new Node(val);
if(root === null){
root = newNode;
} else {
this.insetNode(root,newNode);
}
},this);
this.root = root;
}

2.向排序二叉树中插入节点

// 向二叉树中插入节点
BinaryTree.prototype.insetNode = function (node, newNode) {
if(newNode.value > node.value){
if(node.right === null){
node.right = newNode;
} else {
this.insetNode(node.right,newNode);
}
} else {
if(node.left === null){
node.left = newNode;
} else {
this.insetNode(node.left,newNode);
}
}
};

3.中序遍历

  // 中序遍历
BinaryTree.prototype.LFR = function () {
const result = [];
function computed(node) {
if(node !== null ){
computed(node.left);
result.push(node.value);
computed(node.right);
}
}
computed(this.root);
return result;
};

4.前序遍历

 // 前序遍历
BinaryTree.prototype.FLR = function () {
const result = [];
function computed(node) {
if(node !== null ){
result.push(node.value);
computed(node.left);
computed(node.right);
}
}
computed(this.root);
return result
};

5.后序遍历

 // 后序遍历
BinaryTree.prototype.RFL = function () {
const result = [];
function computed(node) {
if(node !== null ){
computed(node.right);
result.push(node.value);
computed(node.left);
}
}
computed(this.root);
return result
};

6.获取最小值

// 获取二叉树中的最小值
BinaryTree.prototype.getMin = function (node) {
var min = null;
function computed(node) {
if(node){
if(node.left){
computed(node.left);
} else {
min = node.value;
}
}
}
computed(node || this.root);
return min;
};

7.获取最大值

 // 获取二叉树中的最大值
BinaryTree.prototype.getMax = function (node) {
var Max = null;
function computed(node) {
if(node){
if(node.right){
computed(node.right);
} else {
Max = node.value;
}
}
}
computed(node || this.root);
return Max;
};

8.查找给定的值

 // 查找给定值
BinaryTree.prototype.findVal = function (val,node) {
function find(node) {
if(node){
if(node.value === val) return true;
else if(val > node.value) return find(node.right);
else {
return find(node.left);
}
} else {
return false;
} }
return find(node || this.root);
};

9.删除节点

// 删除节点
BinaryTree.prototype.removeNode = function (val,node) {
function remove(val,node) {
if(!node) return null;
if(val > node.value) {
node.right = remove.call(this,val,node.right);
} else if(val < node.value){
node.left = remove.call(this,val,node.left);
} else {
// 要删除的节点没有左孩子也没有右孩子
if(node.right === null && node.left === null){
return null;
}
// 只有右孩子没有左孩子
else if(node.right && node.left === null){
return node.right;
}
// 只有左孩子没有右孩子
else if (node.left && node.right === null) {
return node.left;
}
// 有左孩子也有右孩子
else {
var min = this.getMin(node.right);
node.value = min;
node.right = remove.call(this,min, node.right);
return node;
}
}
return node;
}
remove.call(this,val,node || this.root);
};

10.使用上面的方法

var binaryTree = new BinaryTree([10,4,2,14,3,15,13,12,6,9]);
console.log('中序遍历',binaryTree.LFR());
console.log('前序遍历',binaryTree.FLR());
console.log('后序遍历',binaryTree.RFL());
console.log('最小值',binaryTree.getMin());
console.log('最大值',binaryTree.getMax());
console.log(binaryTree.findVal(4));
binaryTree.removeNode(3);

JavaScript实现排序二叉树的相关算法的更多相关文章

  1. 二叉树-你必须要懂!(二叉树相关算法实现-iOS)

    这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...

  2. JavaScript版排序算法

    JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) //排序算法 window.onload = function(){ var array = ...

  3. 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

    树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n ...

  4. JavaScript实现获取两个排序数组的中位数算法示例

    本文实例讲述了JavaScript排序代码实现获取两个排序数组的中位数算法.分享给大家供大家参考,具体如下: 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个 ...

  5. javascript高级排序算法之快速排序(快排)

    javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...

  6. javascript常用排序算法实现

    毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: & ...

  7. javascript/js实现 排序二叉树数据结构 学习随笔

    二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...

  8. 排序二叉树、平衡二叉树、红黑树、B+树

    一.排序二叉树(Binary Sort Tree,BST树) 二叉排序树,又叫二叉搜索树.有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree). 1 ...

  9. Leetcode——二叉树常考算法整理

    二叉树常考算法整理 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Leetcode算法项目点star呀~~ 二叉树常考算法 ...

随机推荐

  1. linux ssh登录的小知识

    查看服务器的各个端口: # netstat -tulnp 或者 #netstat -tnip 筛选在后面添加 |grep *** 准许root登录 #vi /etc/ssh/sshd_config 找 ...

  2. android 自定义控件用的定时CountDownTimer

    定时执行在一段时候后停止的倒计时,在倒计时执行过程中会在固定间隔时间得到通知(译者:触发onTick方法), 下面的例子显示在一个文本框中显示一个30s倒计时: new CountdownTimer( ...

  3. zabbix监控的基础概念、工作原理及架构

    一.什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题.是一个基于WE ...

  4. Vsftp的PASV mode和Port模式配置文件的设置

    FTP模式与数据端口 FTP 分为两类,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP.这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认 ...

  5. 如何将top命令输出重定向为文件

    命令: # top -b -n 2 -d 3 > /tmp/top.out 解析: -b: batch 模式,可以重定向到文件中 -n:一共取2次top数据 -d:每次top数据间隔为3秒

  6. Spring源码情操陶冶-AnnotationConfigBeanDefinitionParser注解配置解析器

    本文承接前文Spring源码情操陶冶-自定义节点的解析,分析spring中的context:annotation-config节点如何被解析 源码概览 对BeanDefinitionParser接口的 ...

  7. Oracle常见授权与回收权限——grant和revoke

    1.GRANT 赋于权限常用的系统权限集合有以下三个:CONNECT(基本的连接), RESOURCE(程序开发), DBA(数据库管理) 常用的数据对象权限有以下五个:ALL ON 数据对象名, S ...

  8. Java垃圾回收机制[转]

    原文地址:http://blog.csdn.net/zsuguangh/article/details/6429592 综合了若干人的blog- 1. 垃圾回收的意义 在C++中,对象所占的内存在程序 ...

  9. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]

    4517: [Sdoi2016]排列计数 题意:多组询问,n的全排列中恰好m个不是错排的有多少个 容斥原理强行推♂倒她 $恰好m个不是错排 $ \[ =\ \ge m个不是错排 - \ge m+1个不 ...

  10. flask入门与发送邮件与QQ邮箱

    前言: 快两个月没写博客了, 原因是懒了, 没有最初写博客那种看到阅读量上涨, 别人给自己文章点赞后的开心. 心态也发生了不少变化. 有机会再来写写. 前两个月我去厦门某公司实习, 本着去厦门玩一玩还 ...