JS实现的二叉树算法完整实例
发布时间 - 2026-01-11 00:31:52 点击率:次本文实例讲述了JS实现的二叉树算法。分享给大家供大家参考,具体如下:
<!DOCTYPE HTML>
<head>
<title>20130328BinaryTree</title>
<metahttp-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<html>
<body>
<script>
//今天学习了下二叉树算法,总结在这里
//1全局变量 binary Tree =bt
//1.1 node
function Node() { //bt节点
this.text = ''; //节点的文本
this.leftChild = null; //节点的左孩子引用
this.rightild = null; //节点右孩子引用
}
//1.2 二叉树装载的字符串
var strText = "";
var charecters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
var len = charecters.length ; //数组的长度
var nodes = new Array(); //创建一个临时数组,用于存放二叉树节点
//循环创建二叉树节点存放到数组中
for (var i = 0 ; i < len ; i++) {
var node = new Node();
node.text = charecters[i];
nodes.push(node);
}
var root = nodes[0];
//1.3 栈
function Stack() {
var stack = new Array(); //存放栈的数组
//压栈
this.push = function(o) {
stack.push(o);
};
//出栈
this.pop = function() {
var o = stack[stack.length-1];
stack.splice(stack.length-1, 1);
return o;
};
//检查栈是否为空
this.isEmpty = function() {
if(stack.length <= 0) {
return true;
}
else {
return false;
}
};
}
//使用方式如下
var stack = new Stack();
stack.push(1); //现在栈中有一个元素
stack.isEmpty(); //false , 栈不为空
//alert(stack.pop()); //出栈, 打印1
stack.isEmpty(); //true, 此时栈为空,因为在调用了stack.pop()之后元素出栈了,所以为空
//2.1递归实现:
function buildBt1(node, i) {
var leftIndex = 2*i+1, //左孩子节点的索引
rightIndex = 2*i+2; //右孩子节点的索引
if(leftIndex < charecters.length) { //判断索引的长度是否超过了charecters数组的大小
var childNode = new Node(); //创建一个新的节点对象
childNode.text = charecters[leftIndex]; //给节点赋值
node.leftChild = childNode; //给当前节点node加入左孩子节点
buildBt1(childNode, leftIndex); //递归创建左孩子
}
if(rightIndex < charecters.length) { //同上
var childNode = new Node();
childNode.text = charecters[rightIndex];
node.rightChild = childNode;
buildBt1(childNode, rightIndex);
}
}
//2.2非递归实现
function buildBt2() {
index = 0; //索引从0开始
//循环建立二叉树子节点的引用
while(index < len) {
var leftIndex = 2*index+1, //当前节点左孩子索引
rightIndex = 2*index+2; //当前节点右孩子索引
//给当前节点添加左孩子
nodes[index].leftChild = nodes[leftIndex];
//给当前节点添加右孩子
nodes[index].rightChild = nodes[rightIndex];
index++;
}
}
//3遍历
//3.1.1先序递归遍历
function firstIteration(node) {
if(node.leftChild) { //判断当前节点是否有左孩子
firstIteration(node.leftChild); //递归左孩子
}
if(node.rightChild) { //判断当前节点是否有右孩子
firstIteration(node.rightChild); //递归右孩子
}
}
//递归遍历二叉树
firstIteration(root);
//3.1.2先序普通遍历
function notFirstIteration(node) {
var stack = new Stack(), //开辟一个新的栈对象
resultText = ''; //存放非递归遍历之后的字母顺序
stack.push(root); //这个root在上面非递归方式构建二叉树的时候已经构建好的
var node = root;
resultText += node.text;
while(!stack.isEmpty()) {
while(node.leftChild) { //判断当前节点是否有左孩子节点
node = node.leftChild; //取当前节点的左孩子节点
resultText += node.text; //访问当前节点
stack.push(node); //将当前节点压入栈中
}
stack.pop(); //出栈
node = stack.pop().rightChild; //访问当前节点的兄弟节点(右孩子节点)
if(node) { //当前节点的兄弟节点不为空
resultText += node.text; //访问当前节点
stack.push(node); //将当前节点压入栈中
}
else { //当前节点的兄弟节点为空
node = stack.pop(); //在回溯到上一层
}
}
}
//非递归先序遍历
// notFirstIteration(root);
//3.2.1中序递归遍历
function btIteration21(node) {
//访问左节点
if(node.leftChild) {
if(node.leftChild.leftChild) {
btIteration21(node.leftChild);
}
else {
strText += node.leftChild.text;
}
}
//访问根节点
strText += node.text;
//访问右节点
if(node.rightChild) {
if(node.rightChild.leftChild) {
btIteration21(node.rightChild);
}
else {
strText += node.rightChild.text;
}
}
}
//测试区
//2.1.1测试递归实现
var node = new Node();
node.text = charecters[0];
buildBt1(node, 0); //索引i是从0开始构建
btIteration21(node);
alert(strText);
</script>
</body>
</html>
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# JS
# 二叉树
# 算法
# JS实现二叉查找树的建立以及一些遍历方法实现
# JavaScript数据结构之二叉查找树的定义与表示方法
# JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
# JavaScript实现二叉树定义、遍历及查找的方法详解
# JavaScript数据结构之二叉树的查找算法示例
# JavaScript实现二叉树的先序、中序及后序遍历方法详解
# javascript实现二叉树遍历的代码
# Javascript实现从小到大的数组转换成二叉搜索树
# JavaScript数据结构之二叉树的删除算法示例
# JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
# JavaScript数据结构之二叉树的遍历算法示例
# JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
# 递归
# 遍历
# 为空
# 创建一个
# 在这里
# 相关内容
# 中有
# 是从
# 感兴趣
# 数据结构
# 给大家
# 在上面
# 更多关于
# 所述
# 程序设计
# 上一层
# 组中
# 全局变量
# 超过了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何生成URL和重定向?(路由助手函数)
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Python函数文档自动校验_规范解析【教程】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel storage目录权限问题_Laravel文件写入权限设置
EditPlus中的正则表达式实战(5)
Thinkphp 中 distinct 的用法解析
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
使用Dockerfile构建java web环境
jQuery validate插件功能与用法详解
Linux网络带宽限制_tc配置实践解析【教程】
Laravel如何实现数据库事务?(DB Facade示例)
如何构建满足综合性能需求的优质建站方案?
如何在阿里云部署织梦网站?
如何快速完成中国万网建站详细流程?
Laravel怎么使用artisan命令缓存配置和视图
活动邀请函制作网站有哪些,活动邀请函文案?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel如何实现一对一模型关联?(Eloquent示例)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
iOS验证手机号的正则表达式
如何用西部建站助手快速创建专业网站?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
JavaScript中的标签模板是什么_它如何扩展字符串功能
如何在云主机上快速搭建网站?
大型企业网站制作流程,做网站需要注册公司吗?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何确保FTP站点访问权限与数据传输安全?
Laravel如何使用Blade组件和插槽?(Component代码示例)
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
Linux系统运维自动化项目教程_Ansible批量管理实战
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
JS经典正则表达式笔试题汇总
潮流网站制作头像软件下载,适合母子的网名有哪些?

