JavaScript实现排序二叉树的相关算法
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实现排序二叉树的相关算法的更多相关文章
- 二叉树-你必须要懂!(二叉树相关算法实现-iOS)
这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...
- JavaScript版排序算法
JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) //排序算法 window.onload = function(){ var array = ...
- 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL
树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构. a.树是n ...
- JavaScript实现获取两个排序数组的中位数算法示例
本文实例讲述了JavaScript排序代码实现获取两个排序数组的中位数算法.分享给大家供大家参考,具体如下: 题目 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个 ...
- javascript高级排序算法之快速排序(快排)
javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...
- javascript常用排序算法实现
毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: & ...
- javascript/js实现 排序二叉树数据结构 学习随笔
二叉树是一种数据结构.其特点是: 1.由一系列节点组成,具有层级结构.每个节点的特性包含有节点值.关系指针.节点之间存在对应关系. 2.树中存在一个没有父节点的节点,叫做根节点.树的末尾存在一系列没有 ...
- 排序二叉树、平衡二叉树、红黑树、B+树
一.排序二叉树(Binary Sort Tree,BST树) 二叉排序树,又叫二叉搜索树.有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree). 1 ...
- Leetcode——二叉树常考算法整理
二叉树常考算法整理 希望通过写下来自己学习历程的方式帮助自己加深对知识的理解,也帮助其他人更好地学习,少走弯路.也欢迎大家来给我的Github的Leetcode算法项目点star呀~~ 二叉树常考算法 ...
随机推荐
- iOS UImage 与 RGB 裸数据的相互转换
iOS UImage 与 RGB 裸数据的相互转换 Touch the data of image in iOS Get data from a image 较简单,根据已有的 image 的属性,创 ...
- Universe Design Tool Using JDBC connect Sybase/Oracle Get Error
一.针对Sybase 1 使用SAP Universe 设计工具连接Sybase数据库报错,报错如下: “CS: Java Class not found in classpath : com.syb ...
- Python用户输入和代码注释
一.用户输入 若你安装的是Python3.x版本,当你在Python IDLE(编辑器) 中输入以下代码: name = input('用户名:') print('Hello',name) 保存并执行 ...
- flying中的AOP和IOC
注入属性:private synchronized void injectReferenceServices() { if(this.injectReferenceServicesInitialize ...
- nginx把POST转GET请求解决405问题
405重定向,然后把POST转GET upstream local { server 10.0.1.11:81; } server { listen 81; server_name testf.xxx ...
- Git 2.0 更改 push default
近期更新了git,项目push时会提示这样的信息: warning: push.default 尚未设置,它的默认值在 Git 2.0 已从 'matching' 变更为 'simple'.若要不再显 ...
- diff和patch命令(1)
1. diff是对两个集合的差运算,patch是对两个集合的和运算. 2. diff以逐行的方式,比较文本文件的异同处.所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录 ...
- Java并发系列[4]----AbstractQueuedSynchronizer源码分析之条件队列
通过前面三篇的分析,我们深入了解了AbstractQueuedSynchronizer的内部结构和一些设计理念,知道了AbstractQueuedSynchronizer内部维护了一个同步状态和两个排 ...
- [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.9_归一化normalization
觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.9 归一化Normaliation 训练神经网络,其中一个加速训练的方法就是归一化输入(normalize inputs). 假设我们有一个 ...
- WebService学习------小实例开发(号码归属地查询)
1.WebService简介: WebService是一种跨平台,跨语言的,可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.通过SOAP在Web上提 ...