javascript实现二叉树遍历的代码
发布时间 - 2026-01-11 01:47:50 点击率:次前言:

紧接着上篇 二叉树的javascript实现 ,来说一下二叉树的遍历。
本次一本正经的胡说八道,以以下这个二叉树为例子进行遍历:
接着是要引入二叉树实现的代码:
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;
}
function insert(data) {
var n = new Node(data, null, null);
if (this.root == null) {
this.root = n;
}
else {
var current = this.root;
var parent;
while (true) {
parent = current;
if (data < current.data) {
current = current.left;
if (current == null) {
parent.left = n;
break;
}
}
else {
current = current.right;
if (current == null) {
parent.right = n;
break;
}
}
}
}
}
二叉树遍历的分类
二叉树的遍历分为先序、中序、后序遍历。这里说到的先序、中序、后序是相对于父节点来说。父节点的值先输出就是先序,三者间它在中间输出就是中序,最后输出就是后序。至于那个是父节点是相对而言的,因为除了叶子节点(最底下一层节点),其他每个节点都可以是父节点。
先序遍历
先序遍历就是,先打印父节点,然后是左子节点(左子树),然后再打印右子节点(子树)。
function preOrder(node) {
if (!(node == null)) {
console.log(node.show() + " ");
preOrder(node.left);
preOrder(node.right);
}
}
// 给BST类添加先序遍历的成员方法
function BST() {
this.root = null;
this.insert = insert;
this.preOrder = preOrder;
}
preOrder函数是递归实现的,应该说二叉树的遍历都是递归实现的。可能有些人会因为先序遍历的特征:“先打印父节点,然后是左子节点(左子树),然后再打印右子节点(子树)” 而陷入一个错误的想法,这想法是什么请看下图:
注意红框部分,父节点是10,左子节点是3,右子节点是18,因为上面的结论,可能会错误地认为打印的顺序是10 → 3 → 18,然而事实并非如此[捂脸],真是的顺序是:先打印10,然后是打印左子树,打印完左子树的全部节点后,才开始打印以10位父节点的右子树:
这个时候,你的脑海就该这样想:
然后是这样想:
如此类推打印完以10为父节点的左子树,然后也是以这样的方式打印以10为父节点的右子树,按着这种 拆分代替的思想 来理解会更好明白二叉树的遍历。
然后最终,先序遍历改二叉树的顺序是:
按图的输出顺序是:10 -> 3 -> 2 -> 4 -> 9 -> 8 -> 9 -> 18 -> 13 -> 21
最后来实践一下,先序遍历:
var bst = new BST();
var nums = [10, 3, 18, 2, 4, 13, 21, 9, 8, 9];
for(var i = 0; i < nums.length; i++) {
bst.insert(nums[i]);
}
bst.preOrder(bst.root);
这里强调一下,输出顺序和插入顺序有关的,因为你插入顺序不同生成的二叉树也是不同的。有疑问的可以去 二叉树的javascript实现 细看一下,有比较明白的说明了二叉树,也可以实验一下:
中序遍历
看完先序遍历,已经可以类推到很多和中序、后序遍历相关的知识点。中序遍历的特征是:先打印左子树(左子节点),接着打印父节点,最后打印右子树(右子节点)。
function inOrder(node) {
if (!(node == null)) {
inOrder(node.left);
console.log(node.show() + " ");
inOrder(node.right);
}
}
// 给BST类添加该成员方法
function BST() {
this.root = null;
this.insert = insert;
this.preOrder = preOrder;
this.inOrder = inOrder;
}
中序遍历的打印顺序:
按上图的输出顺序是:2 -> 3 -> 4 -> 8 -> 9 -> 9 -> 10 -> 13 -> 18 -> 21
接着是,实践一下中序遍历:
后序遍历
function postOrder(node) {
if (!(node == null)) {
postOrder(node.left);
postOrder(node.right);
console.log(node.show() + " ");
}
}
// 给BST类添加该成员方法
function BST() {
this.root = null;
this.insert = insert;
this.preOrder = preOrder;
this.inOrder = inOrder;
this.postOrder = postOrder;
}
后序遍历的打印顺序
按上图的输出顺序是:2 -> 8 -> 9 -> 9 -> 4 -> 3 -> 13 -> 21 -> 18 -> 10
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# javascript实现二叉树遍历
# javascript二叉树遍历
# JS
# 二叉树遍历
# 利用JS实现二叉树遍历算法实例代码
# JavaScript数据结构与算法之二叉树遍历算法详解【先序、中序、后序】
# JS中的二叉树遍历详解
# javaScript遍历对象和数组的方法总结
# JavaScript遍历json对象数据的方法
# JavaScript实现二叉树层序遍历
# 遍历
# 子树
# 二叉树
# 递归
# 然后再
# 为先
# 为父
# 都是
# 按上
# 的说
# 是这样
# 为你
# 说到
# 一本
# 看完
# 并非如此
# 这个时候
# 人会
# 应该说
# 它在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
浅谈javascript alert和confirm的美化
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
javascript中的try catch异常捕获机制用法分析
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
javascript中对象的定义、使用以及对象和原型链操作小结
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
三星、SK海力士获美批准:可向中国出口芯片制造设备
Laravel怎么在Blade中安全地输出原始HTML内容
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
微信小程序 wx.uploadFile无法上传解决办法
如何挑选优质建站一级代理提升网站排名?
如何获取PHP WAP自助建站系统源码?
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Firefox Developer Edition开发者版本入口
Android自定义控件实现温度旋转按钮效果
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Python结构化数据采集_字段抽取解析【教程】
如何在建站主机中优化服务器配置?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
🚀拖拽式CMS建站能否实现高效与个性化并存?
IOS倒计时设置UIButton标题title的抖动问题
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
如何挑选最适合建站的高性能VPS主机?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
详解MySQL数据库的安装与密码配置
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel如何实现多对多模型关联?(Eloquent教程)
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
Laravel如何使用Blade模板引擎?(完整语法和示例)
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
JS实现鼠标移上去显示图片或微信二维码
微信h5制作网站有哪些,免费微信H5页面制作工具?
Android利用动画实现背景逐渐变暗
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
phpredis提高消息队列的实时性方法(推荐)
如何快速重置建站主机并恢复默认配置?
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel用户密码怎么加密_Laravel Hash门面使用教程
移动端脚本框架Hammer.js

