JS二叉树的简单实现方法示例
发布时间 - 2026-01-11 00:31:25 点击率:次本文实例讲述了JS二叉树的简单实现方法。分享给大家供大家参考,具体如下:

今天学习了一下 二叉树的实现,在此记录一下
简单的二叉树实现,并且实现升序和降序排序输出
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.inOrderDesc = inOrderDesc;//中序遍历(降序)
this.preOrder = preOrder;//先序遍历
this.postOrder = postOrder;//后续遍历
this.getMin = getMin;//最大值
this.getMax = getMax;//最小值
this.find = find;//查找值
this.remove = remove;//删除节点
this.count = count;//获取节点数量
function insert(data){
//创建一个新的节点
var newNode = new Node(data,null,null);
//判断是否存在根节点,没有将新节点存入
if(this.root == null){
this.root = newNode;
}else{
//获取根节点
var current = this.root;
var parent;
while(true){
//将当前节点保存为父节点
parent = current;
//将小的数据放在左节点
if(data < current.data){
//获取当前节点的左节点
//判断当前节点下的左节点是否有数据
current = current.left;
if(current == null){
//如果没有数据将新节点存入当前节点下的左节点
parent.left = newNode;
break;
}
}else{
current = current.right;
if(current == null){
parent.right = newNode;
break;
}
}
}
}
}
function inOrder(node){
var data = [];
_inOrder(node,data);
return data;
}
function inOrderDesc(node){
var data = [];
_inOrderDesc(node,data);
return data;
}
function preOrder(node){
var data = [];
_preOrder(node,data);
return data;
}
function postOrder(node){
var data = [];
_postOrder(node,data);
return data;
}
function _inOrder(node,data){
if(!(node == null)){
_inOrder(node.left,data);
data.push(node.show());
_inOrder(node.right,data);
}
}
function _inOrderDesc(node,data){
debugger;
if(!(node == null)){
_inOrderDesc(node.right,data);
data.push(node.show());
_inOrderDesc(node.left,data);
}
}
function _preOrder(node,data){
if(!(node == null)){
data.push(node.show());
_preOrder(node.left,data);
_preOrder(node.right,data);
}
}
function _postOrder(node,data){
if(!(node == null)){
_postOrder(node.left,data);
_postOrder(node.right,data);
data.push(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(data == current.data){
return current;
}else if(data < current.data){
current = current.left;
}else{
current = current.right;
}
}
return null;
}
function getSmallest(node){
var current = node;
while(!(current.left == null)){
current = current.left;
}
return current;
}
function remove(data){
root = removeNode(this.root,data);
}
function removeNode(node,data){
if(node == null){
return null;
}
if(data == node.data){
//如果没有只节点
if(node.left == null && node.right){
return null;
}
//如果没有左节点
if(node.left == null){
return node.right;
}
//如果没有右节点
if(node.right == null){
return node.left;
}
//有两节点
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;
}
}
function count(){
var counts = 0;
var current = this.root;
if(current == null){
return counts;
}
return _count(current,counts);
}
function _count(node,counts){
debugger;
if(!(node == null)){
counts ++;
counts = _count(node.left,counts);;
counts = _count(node.right,counts);
}
return counts;
}
}
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# 二叉树
# JS中的二叉树遍历详解
# JS实现的二叉树算法完整实例
# JavaScript数据结构和算法之二叉树详解
# JavaScript实现二叉树的先序、中序及后序遍历方法详解
# JavaScript数据结构之二叉树的删除算法示例
# JavaScript数据结构之二叉树的查找算法示例
# JavaScript数据结构之二叉树的遍历算法示例
# JavaScript实现二叉树定义、遍历及查找的方法详解
# JavaScript数据结构之二叉树的计数算法示例
# JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
# 遍历
# 如果没有
# 升序
# 放在
# 降序
# 相关内容
# 在此
# 感兴趣
# 数据结构
# 给大家
# 更多关于
# 所述
# 创建一个
# 程序设计
# 为父
# 判断是否
# 最小值
# 讲述了
# left
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
如何彻底卸载建站之星软件?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel如何使用Blade组件和插槽?(Component代码示例)
如何快速辨别茅台真假?关键步骤解析
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何在万网开始建站?分步指南解析
bootstrap日历插件datetimepicker使用方法
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
php打包exe后无法访问网络共享_共享权限设置方法【教程】
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
EditPlus中的正则表达式实战(6)
如何利用DOS批处理实现定时关机操作详解
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
,交易猫的商品怎么发布到网站上去?
在线教育网站制作平台,山西立德教育官网?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
微信小程序 scroll-view组件实现列表页实例代码
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Laravel中的Facade(门面)到底是什么原理
Laravel如何使用.env文件管理环境变量?(最佳实践)
网站图片在线制作软件,怎么在图片上做链接?
深圳网站制作培训,深圳哪些招聘网站比较好?
html5的keygen标签为什么废弃_替代方案说明【解答】
活动邀请函制作网站有哪些,活动邀请函文案?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
电商网站制作价格怎么算,网上拍卖流程以及规则?
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
php485函数参数是什么意思_php485各参数详细说明【介绍】
如何在VPS电脑上快速搭建网站?
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel怎么在Controller之外的地方验证数据
Laravel如何使用Blade模板引擎?(完整语法和示例)
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
node.js报错:Cannot find module 'ejs'的解决办法
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何快速查询网址的建站时间与历史轨迹?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
怎么用AI帮你设计一套个性化的手机App图标?
新三国志曹操传主线渭水交兵攻略
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何获取PHP WAP自助建站系统源码?
详解jQuery中基本的动画方法
iOS中将个别页面强制横屏其他页面竖屏

