javascript实现二叉树的代码
发布时间 - 2026-01-11 01:47:48 点击率:次前言:
二叉树的特点(例图只是二叉树的一种情况,不要尝试用例图推理以下结论)
- 除了最下面一层,每个节点都是父节点,每个节点都有且最多有两个子节点;
- 除了嘴上面一层,每个节点是子节点,每个节点都会有一个父节点;
- 最上面一层的节点(即例图中的节点50)为根节点;
最下面一层的节点称为叶子节点,他们没有子节点;
左子节点的值 < 父节点的值 <= 右节点的值
1 节点的javascript实现
// 节点对象
function Node(data, left, right) {
this.data = data; // 节点值
this.left = left; // 当前节点的左子节点
this.right = right; // 当前节点的右子节点
this.show = show; // 辅助function
}
function show() {
return this.data;
}
感受下上面实现节点的代码,感觉和链表有点相似不是吗,存着当前值,又存着下个节点(左、右子节点)的引用,下面是一张伪代码的草图:
2 二叉树的实现
实现二叉树,当然就是要插入节点构成二叉树,先看看实现二叉树的js代码
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 BST() {
this.root = null; // 根节点
this.insert = insert;
}
function insert(data) {
// 初始化一个节点,为什么要将左右子节点的引用初始化为空呢,因为可能是叶子节点,加入他有子节点,会在下面的代码添加
var n = new Node(data, null, null);
if (该二叉树是否为空,是空则根节点为空,因此可以用根节点判断二叉树是否为空) {
// 将当前节点存为根节点
this.root = n;
}
else {
// 来到这里就表示,该二叉树不为空,这里关键的是两句代码:
// 0.while (true);
// 1.parent = current;
// 2.current = current.left;/current = current.right;
// 3.break;
var current = this.root;
var parent;
while (true) {
parent = current; // 获得父节点,第一次循环,那么父节点就是根节点
if (data < current.data) { // 当前节点值小于父节点的值就是存左边,记得二叉树的特点吧,如果真是小于父节点,那么就说明该节点属于,该父节点的左子树。
current = current.left;
if (current == null) {
parent.left = n;
break;
}
// 其实上面这样写不好理解,可以等价于下面的代码:
// start
if(current.left == null){ // 若果左节点空,那么这个空的节点就是我们要插入的位置
current.left = n;
break;
}else{
// 不空则继续往下一层找空节点(插入的位置)
current = current.left;
}
// end
}
else {
// 右节点的逻辑代码个左节点的一样的
current = current.right;
if (current == null) {
parent.right = n;
break;
}
}
}
}
}
下面是一个更好理解的插入函数
function insert(data) {
var n = new Node(data, null, null);
if (this.root == null) {
this.root = n;
}
else {
var current = this.root;
// start change
while (true) {
if (data < current.data) {
if (current.left == null) {
current.left = n;
break;
}else{
current = current.left;
}
}else {
if (current.right == null) {
current.right = n;
break;
}else{
current = current.right;
}
}
}
}
}
小结:
二叉树的实现的三个部件
Node对象
function Node(data, left, right) { ... }
BST对象
function BST() { ... }
插入节点函数
function insert(data) { ... }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# javascript实现二叉树
# javascript
# 二叉树
# js二叉树的实现
# JS中的二叉树遍历详解
# JS实现的二叉树算法完整实例
# JavaScript数据结构和算法之二叉树详解
# JS二叉树的简单实现方法示例
# JavaScript实现二叉树的先序、中序及后序遍历方法详解
# javascript实现二叉树遍历的代码
# JavaScript数据结构之二叉树的删除算法示例
# JavaScript数据结构之二叉树的遍历算法示例
# JavaScript数据结构之二叉树的查找算法示例
# js构建二叉树进行数值数组的去重与优化详解
# 为空
# 子树
# 的是
# 都是
# 是一个
# 都有
# 最多
# 可以用
# 会在
# 他有
# 两句
# 要将
# 看一下
# 往下
# 嘴上
# 下个
# 图中
# 大家多多
# 点吧
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用狗爹虚拟主机快速搭建网站?
如何在云服务器上快速搭建个人网站?
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
,在苏州找工作,上哪个网站比较好?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何快速生成ASP一键建站模板并优化安全性?
linux top下的 minerd 木马清除方法
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
iOS UIView常见属性方法小结
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
网站建设保证美观性,需要考虑的几点问题!
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Swift中switch语句区间和元组模式匹配
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel安装步骤详细教程_Laravel环境搭建指南
iOS验证手机号的正则表达式
海南网站制作公司有哪些,海口网是哪家的?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
用yum安装MySQLdb模块的步骤方法
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何确保西部建站助手FTP传输的安全性?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Laravel如何保护应用免受CSRF攻击?(原理和示例)
微信推文制作网站有哪些,怎么做微信推文,急?
如何正确下载安装西数主机建站助手?
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
如何挑选优质建站一级代理提升网站排名?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
如何用美橙互联一键搭建多站合一网站?
JS碰撞运动实现方法详解
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
Swift中循环语句中的转移语句 break 和 continue
利用python获取某年中每个月的第一天和最后一天
Laravel如何创建自定义Artisan命令?(代码示例)
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
Laravel怎么实现验证码(Captcha)功能
C#如何调用原生C++ COM对象详解

