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. java里程碑之泛型--使用泛型

    现在重新整理下泛型,前面的整理好多的底层的东西理解不深.泛型很重要的,作为java的一个程碑式的改进,还是很有必要认真的理解下人家的JDK的良苦用心的. 1,什么是泛型?为什么要使用泛型? 一定要记住 ...

  2. 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。

    /** * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名. */ private function createSign($parameters,$key) { $signP ...

  3. 计算器(Ext)

    <html> <head> <title>计算器</title> <meta charset="UTF-8"> < ...

  4. mavean的依赖传递和排除依赖

    三个mavean项目 A  .B. C 如果B依赖A(A先执行clean package命令) 那么B得pom.xml文件里面就写 <dependency> <groupId> ...

  5. android在一个应用程序员启动另一个程序

    一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: Intent intent = new Intent(Intent.ACTION_MAIN); int ...

  6. linux下^M问题

    ^M的原因 Dos.Windows 格式的文件,用 0D 0A (CR+LF)作为换行符 而Unix 的则是以0A(LF) 作为换行符 所以dos 底下的文本文件到了unix的话,换行符就会多出来一个 ...

  7. C程序结构

    从程序流程的角度来看,C语言中的语句可以分为3种基本结构:顺序结构.分支结构和循环结构. ① 顺序结构的执行过程如图5-1所示.在这种结构中,程序会顺序执行各条语句. ② 分支结构的执行过程如图5-2 ...

  8. 全部用startssl生成的证书,配置Apache使其支持SSL

    Apache的编译安装见这篇: http://www.cnblogs.com/yjken/p/3921840.html 网上查阅了一大批资料,得知自己生成的证书是会被浏览器提示“证书不安全”的,我也就 ...

  9. mysql5.6默认情况下内存占用太大

    下载了mysql5.6.12 ,默认占用内存达400多M,  而原来使用的5.0 只有30M.. 解决方案:调整以下参数----------------performance_schema_max_t ...

  10. 关于WebApi 跨域问题的解决的方式

    最近在做WebApi 进行开发的时候 一直会遇到跨域方面的问题那么如何进行跨域问题其实非常的简单. 1.一直在使用WebApi的时候总是遇到跨域的问题 那么 什么是跨域?跨域,指的是浏览器不能执行其他 ...