当前位置: 首页 > article >正文

JS二叉树的深度优先、广度优先实现代码

class Node {
  constructor(data) {
    this.data = data;
    this.left = null;
    this.right = null;
  }
}

(function() {
  const root = new Node(2);
  root.left = new Node(3);
  root.right = new Node(4);
  root.left.left = new Node(5);
  root.left.right = new Node(6);

  // DFS深度优先 递归遍历
  // 1、先序遍历 优先访问节点 -> 左子树 -> 右子树
  function clrMap(rootNode) {
    if (!rootNode) return;
    console.log('先序遍历打印====', rootNode.data);
    clrMap(rootNode.left);
    clrMap(rootNode.right);
  }
  // 2、中序遍历 优先访问左子树 -> 节点 -> 右子树
  function lcrMap(rootNode) {
    if (!rootNode) return;
    lcrMap(rootNode.left);
    console.log('中序遍历打印====', rootNode.data);
    lcrMap(rootNode.right);
  }
  // 3、后序遍历 优先访问左子树 -> 右子树 -> 节点
  function lrcMap(rootNode) {
    if (!rootNode) return;
    lrcMap(rootNode.left);
    lrcMap(rootNode.right);
    console.log('后序遍历打印====', rootNode.data);
  }
  console.log('=============***************=============');
  clrMap(root);
  console.log('=============***************=============');
  lcrMap(root);
  console.log('=============***************=============');
  lrcMap(root);
  console.log('=============***************=============');
  // 广度优先 BFS
  function bfs(rootNode) {
    if (!rootNode) return;
    const queue = [rootNode];
    while (queue.length) {
      const current = queue.shift();
      if (!current) return;
      
      console.log('广度优先遍历打印====', current.data);
      if (current.left) queue.push(current.left);
      if (current.right) queue.push(current.right);
    }
  }
  bfs(root);
})()


代码打印结果

=============***************=============
VM183:20 先序遍历打印==== 2
VM183:20 先序遍历打印==== 3
VM183:20 先序遍历打印==== 5
VM183:20 先序遍历打印==== 6
VM183:20 先序遍历打印==== 4
VM183:40 =============***************=============
VM183:28 中序遍历打印==== 5
VM183:28 中序遍历打印==== 3
VM183:28 中序遍历打印==== 6
VM183:28 中序遍历打印==== 2
VM183:28 中序遍历打印==== 4
VM183:42 =============***************=============
VM183:36 后序遍历打印==== 5
VM183:36 后序遍历打印==== 6
VM183:36 后序遍历打印==== 3
VM183:36 后序遍历打印==== 4
VM183:36 后序遍历打印==== 2
VM183:44 =============***************=============
VM183:53 广度优先遍历打印==== 2
VM183:53 广度优先遍历打印==== 3
VM183:53 广度优先遍历打印==== 4
VM183:53 广度优先遍历打印==== 5
VM183:53 广度优先遍历打印==== 6


http://www.kler.cn/news/319880.html

相关文章:

  • Java数据库连接jdbc
  • MATLAB基础应用精讲-【数模应用】OR值
  • 牛客周赛 Round 61 (C++实现)
  • 【算法中的最优解和较优解问题】
  • 开源标注工具
  • 【Java】注解与单元测试的使用【主线学习笔记】
  • JS手写Promise以及promise.all方法
  • QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第七期]
  • Go Mail设置指南:如何提升发送邮件效率?
  • 【Linux 从基础到进阶】Hadoop 大数据平台搭建与优化
  • ARM/Linux嵌入式面经(三九):中科驭数
  • 解决多尺度网络中上采样尺寸不一致问题
  • 低代码中实现数据映射的必要性与方案
  • 18 vue3之定义自定义指令Directive
  • 10.Lab Nine —— file system-上
  • 跳跃列表(Skip List)详解
  • JS显示数字时钟的格式时间
  • Vue.js 与 Flask 或 Django 后端配合
  • ArrayList源码实现(一)
  • Scala第一天
  • Tomcat may not be running
  • Facebook个人账户被停用是什么原因?如何解决?
  • 剖析:基于 RDMA 的多机数据分发和接收场景
  • 基于Java的宠物之家小程序 宠物服务小程序【源码+调试】
  • sort 命令:文本排序
  • 计算机的错误计算(一百零四)
  • 通过两个类计算一个长方形的周长和面积
  • MySql语言操作数据库---增删改查数据库,表,数据
  • 速盾:AI能为高防cdn带来什么?
  • 828华为云征文|华为云Flexus云服务器X实例Windows系统部署一键短视频生成AI工具moneyprinter